summaryrefslogtreecommitdiffhomepage
path: root/scripts/config/expr.c
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/config/expr.c')
-rw-r--r--scripts/config/expr.c50
1 files changed, 28 insertions, 22 deletions
diff --git a/scripts/config/expr.c b/scripts/config/expr.c
index 3f15ae859..10f45232b 100644
--- a/scripts/config/expr.c
+++ b/scripts/config/expr.c
@@ -10,6 +10,8 @@
#define LKC_DIRECT_LINK
#include "lkc.h"
+#define DEBUG_EXPR 0
+
struct expr *expr_alloc_symbol(struct symbol *sym)
{
struct expr *e = malloc(sizeof(*e));
@@ -220,10 +222,12 @@ int expr_eq(struct expr *e1, struct expr *e2)
/* panic */;
}
- print_expr(0, e1, 0);
- printf(" = ");
- print_expr(0, e2, 0);
- printf(" ?\n");
+ if (DEBUG_EXPR) {
+ expr_fprint(e1, stdout);
+ printf(" = ");
+ expr_fprint(e2, stdout);
+ printf(" ?\n");
+ }
return 0;
}
@@ -397,11 +401,13 @@ struct expr *expr_join_or(struct expr *e1, struct expr *e2)
return expr_alloc_symbol(&symbol_yes);
}
- printf("optimize ");
- print_expr(0, e1, 0);
- printf(" || ");
- print_expr(0, e2, 0);
- printf(" ?\n");
+ if (DEBUG_EXPR) {
+ printf("optimize (");
+ expr_fprint(e1, stdout);
+ printf(") || (");
+ expr_fprint(e2, stdout);
+ printf(")?\n");
+ }
return NULL;
}
@@ -444,6 +450,11 @@ struct expr *expr_join_and(struct expr *e1, struct expr *e2)
// (a) && (a!='n') -> (a)
return expr_alloc_symbol(sym1);
+ if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_mod) ||
+ (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_mod))
+ // (a) && (a!='m') -> (a='y')
+ return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes);
+
if (sym1->type == S_TRISTATE) {
if (e1->type == E_EQUAL && e2->type == E_UNEQUAL) {
// (a='b') && (a!='c') -> 'b'='c' ? 'n' : a='b'
@@ -483,11 +494,14 @@ struct expr *expr_join_and(struct expr *e1, struct expr *e2)
(e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_yes))
return NULL;
}
- printf("optimize ");
- print_expr(0, e1, 0);
- printf(" && ");
- print_expr(0, e2, 0);
- printf(" ?\n");
+
+ if (DEBUG_EXPR) {
+ printf("optimize (");
+ expr_fprint(e1, stdout);
+ printf(") && (");
+ expr_fprint(e2, stdout);
+ printf(")?\n");
+ }
return NULL;
}
@@ -1073,11 +1087,3 @@ void expr_fprint(struct expr *e, FILE *out)
{
expr_print(e, expr_print_file_helper, out, E_NONE);
}
-
-void print_expr(int mask, struct expr *e, int prevtoken)
-{
- if (!(cdebug & mask))
- return;
- expr_fprint(e, stdout);
-}
-