Lines Matching refs:expr
14 static int expr_eq(struct expr *e1, struct expr *e2);
15 static struct expr *expr_eliminate_yn(struct expr *e);
17 struct expr *expr_alloc_symbol(struct symbol *sym) in expr_alloc_symbol()
19 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_symbol()
25 struct expr *expr_alloc_one(enum expr_type type, struct expr *ce) in expr_alloc_one()
27 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_one()
29 e->left.expr = ce; in expr_alloc_one()
33 struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2) in expr_alloc_two()
35 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_two()
37 e->left.expr = e1; in expr_alloc_two()
38 e->right.expr = e2; in expr_alloc_two()
42 struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2) in expr_alloc_comp()
44 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_comp()
51 struct expr *expr_alloc_and(struct expr *e1, struct expr *e2) in expr_alloc_and()
58 struct expr *expr_alloc_or(struct expr *e1, struct expr *e2) in expr_alloc_or()
65 struct expr *expr_copy(const struct expr *org) in expr_copy()
67 struct expr *e; in expr_copy()
79 e->left.expr = expr_copy(org->left.expr); in expr_copy()
93 e->left.expr = expr_copy(org->left.expr); in expr_copy()
94 e->right.expr = expr_copy(org->right.expr); in expr_copy()
106 void expr_free(struct expr *e) in expr_free()
115 expr_free(e->left.expr); in expr_free()
126 expr_free(e->left.expr); in expr_free()
127 expr_free(e->right.expr); in expr_free()
141 static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct expr **ep2) in __expr_eliminate_eq()
144 __expr_eliminate_eq(type, &e1->left.expr, &e2); in __expr_eliminate_eq()
145 __expr_eliminate_eq(type, &e1->right.expr, &e2); in __expr_eliminate_eq()
149 __expr_eliminate_eq(type, &e1, &e2->left.expr); in __expr_eliminate_eq()
150 __expr_eliminate_eq(type, &e1, &e2->right.expr); in __expr_eliminate_eq()
175 void expr_eliminate_eq(struct expr **ep1, struct expr **ep2) in expr_eliminate_eq()
200 static int expr_eq(struct expr *e1, struct expr *e2) in expr_eq()
217 return expr_eq(e1->left.expr, e2->left.expr); in expr_eq()
246 static struct expr *expr_eliminate_yn(struct expr *e) in expr_eliminate_yn()
248 struct expr *tmp; in expr_eliminate_yn()
252 e->left.expr = expr_eliminate_yn(e->left.expr); in expr_eliminate_yn()
253 e->right.expr = expr_eliminate_yn(e->right.expr); in expr_eliminate_yn()
254 if (e->left.expr->type == E_SYMBOL) { in expr_eliminate_yn()
255 if (e->left.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
256 expr_free(e->left.expr); in expr_eliminate_yn()
257 expr_free(e->right.expr); in expr_eliminate_yn()
260 e->right.expr = NULL; in expr_eliminate_yn()
262 } else if (e->left.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
263 free(e->left.expr); in expr_eliminate_yn()
264 tmp = e->right.expr; in expr_eliminate_yn()
265 *e = *(e->right.expr); in expr_eliminate_yn()
270 if (e->right.expr->type == E_SYMBOL) { in expr_eliminate_yn()
271 if (e->right.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
272 expr_free(e->left.expr); in expr_eliminate_yn()
273 expr_free(e->right.expr); in expr_eliminate_yn()
276 e->right.expr = NULL; in expr_eliminate_yn()
278 } else if (e->right.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
279 free(e->right.expr); in expr_eliminate_yn()
280 tmp = e->left.expr; in expr_eliminate_yn()
281 *e = *(e->left.expr); in expr_eliminate_yn()
288 e->left.expr = expr_eliminate_yn(e->left.expr); in expr_eliminate_yn()
289 e->right.expr = expr_eliminate_yn(e->right.expr); in expr_eliminate_yn()
290 if (e->left.expr->type == E_SYMBOL) { in expr_eliminate_yn()
291 if (e->left.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
292 free(e->left.expr); in expr_eliminate_yn()
293 tmp = e->right.expr; in expr_eliminate_yn()
294 *e = *(e->right.expr); in expr_eliminate_yn()
297 } else if (e->left.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
298 expr_free(e->left.expr); in expr_eliminate_yn()
299 expr_free(e->right.expr); in expr_eliminate_yn()
302 e->right.expr = NULL; in expr_eliminate_yn()
306 if (e->right.expr->type == E_SYMBOL) { in expr_eliminate_yn()
307 if (e->right.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
308 free(e->right.expr); in expr_eliminate_yn()
309 tmp = e->left.expr; in expr_eliminate_yn()
310 *e = *(e->left.expr); in expr_eliminate_yn()
313 } else if (e->right.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
314 expr_free(e->left.expr); in expr_eliminate_yn()
315 expr_free(e->right.expr); in expr_eliminate_yn()
318 e->right.expr = NULL; in expr_eliminate_yn()
332 struct expr *expr_trans_bool(struct expr *e) in expr_trans_bool()
340 e->left.expr = expr_trans_bool(e->left.expr); in expr_trans_bool()
341 e->right.expr = expr_trans_bool(e->right.expr); in expr_trans_bool()
361 static struct expr *expr_join_or(struct expr *e1, struct expr *e2) in expr_join_or()
363 struct expr *tmp; in expr_join_or()
373 tmp = e1->left.expr; in expr_join_or()
380 if (e2->left.expr->type != E_SYMBOL) in expr_join_or()
382 sym2 = e2->left.expr->left.sym; in expr_join_or()
410 if ((e1->type == E_NOT && e1->left.expr->type == E_SYMBOL && e2->type == E_SYMBOL) || in expr_join_or()
411 (e2->type == E_NOT && e2->left.expr->type == E_SYMBOL && e1->type == E_SYMBOL)) in expr_join_or()
425 static struct expr *expr_join_and(struct expr *e1, struct expr *e2) in expr_join_and()
427 struct expr *tmp; in expr_join_and()
437 tmp = e1->left.expr; in expr_join_and()
444 if (e2->left.expr->type != E_SYMBOL) in expr_join_and()
446 sym2 = e2->left.expr->left.sym; in expr_join_and()
519 static void expr_eliminate_dups1(enum expr_type type, struct expr **ep1, struct expr **ep2) in expr_eliminate_dups1()
523 struct expr *tmp; in expr_eliminate_dups1()
526 expr_eliminate_dups1(type, &e1->left.expr, &e2); in expr_eliminate_dups1()
527 expr_eliminate_dups1(type, &e1->right.expr, &e2); in expr_eliminate_dups1()
531 expr_eliminate_dups1(type, &e1, &e2->left.expr); in expr_eliminate_dups1()
532 expr_eliminate_dups1(type, &e1, &e2->right.expr); in expr_eliminate_dups1()
571 struct expr *expr_eliminate_dups(struct expr *e) in expr_eliminate_dups()
594 struct expr *expr_transform(struct expr *e) in expr_transform()
596 struct expr *tmp; in expr_transform()
611 e->left.expr = expr_transform(e->left.expr); in expr_transform()
612 e->right.expr = expr_transform(e->right.expr); in expr_transform()
621 e->left.expr = expr_alloc_symbol(e->left.sym); in expr_transform()
655 e->left.expr = expr_alloc_symbol(e->left.sym); in expr_transform()
661 switch (e->left.expr->type) { in expr_transform()
664 tmp = e->left.expr->left.expr; in expr_transform()
665 free(e->left.expr); in expr_transform()
673 tmp = e->left.expr; in expr_transform()
681 tmp = e->left.expr; in expr_transform()
689 tmp = e->left.expr; in expr_transform()
696 tmp = e->left.expr; in expr_transform()
698 e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); in expr_transform()
700 tmp->right.expr = NULL; in expr_transform()
705 tmp = e->left.expr; in expr_transform()
707 e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); in expr_transform()
709 tmp->right.expr = NULL; in expr_transform()
713 if (e->left.expr->left.sym == &symbol_yes) { in expr_transform()
715 tmp = e->left.expr; in expr_transform()
722 if (e->left.expr->left.sym == &symbol_mod) { in expr_transform()
724 tmp = e->left.expr; in expr_transform()
731 if (e->left.expr->left.sym == &symbol_no) { in expr_transform()
733 tmp = e->left.expr; in expr_transform()
751 int expr_contains_symbol(struct expr *dep, struct symbol *sym) in expr_contains_symbol()
759 return expr_contains_symbol(dep->left.expr, sym) || in expr_contains_symbol()
760 expr_contains_symbol(dep->right.expr, sym); in expr_contains_symbol()
772 return expr_contains_symbol(dep->left.expr, sym); in expr_contains_symbol()
779 bool expr_depends_symbol(struct expr *dep, struct symbol *sym) in expr_depends_symbol()
786 return expr_depends_symbol(dep->left.expr, sym) || in expr_depends_symbol()
787 expr_depends_symbol(dep->right.expr, sym); in expr_depends_symbol()
808 struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym) in expr_trans_compare()
810 struct expr *e1, *e2; in expr_trans_compare()
820 e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); in expr_trans_compare()
821 e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym); in expr_trans_compare()
830 e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); in expr_trans_compare()
831 e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym); in expr_trans_compare()
840 return expr_trans_compare(e->left.expr, type == E_EQUAL ? E_UNEQUAL : E_EQUAL, sym); in expr_trans_compare()
917 tristate expr_calc_value(struct expr *e) in expr_calc_value()
933 val1 = expr_calc_value(e->left.expr); in expr_calc_value()
934 val2 = expr_calc_value(e->right.expr); in expr_calc_value()
937 val1 = expr_calc_value(e->left.expr); in expr_calc_value()
938 val2 = expr_calc_value(e->right.expr); in expr_calc_value()
941 val1 = expr_calc_value(e->left.expr); in expr_calc_value()
1031 static inline struct expr *
1032 expr_get_leftmost_symbol(const struct expr *e) in expr_get_leftmost_symbol()
1039 e = e->left.expr; in expr_get_leftmost_symbol()
1048 struct expr *expr_simplify_unmet_dep(struct expr *e1, struct expr *e2) in expr_simplify_unmet_dep()
1050 struct expr *ret; in expr_simplify_unmet_dep()
1055 expr_simplify_unmet_dep(e1->left.expr, e2), in expr_simplify_unmet_dep()
1056 expr_simplify_unmet_dep(e1->right.expr, e2)); in expr_simplify_unmet_dep()
1058 struct expr *e; in expr_simplify_unmet_dep()
1073 void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int … in expr_print()
1091 expr_print(e->left.expr, fn, data, E_NOT); in expr_print()
1128 expr_print(e->left.expr, fn, data, E_OR); in expr_print()
1130 expr_print(e->right.expr, fn, data, E_OR); in expr_print()
1133 expr_print(e->left.expr, fn, data, E_AND); in expr_print()
1135 expr_print(e->right.expr, fn, data, E_AND); in expr_print()
1139 if (e->left.expr) { in expr_print()
1141 expr_print(e->left.expr, fn, data, E_LIST); in expr_print()
1168 void expr_fprint(struct expr *e, FILE *out) in expr_fprint()
1203 void expr_gstr_print(struct expr *e, struct gstr *gs) in expr_gstr_print()