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);
16 static struct expr *expr_extract_eq_and(struct expr **ep1, struct expr **ep2);
17 static struct expr *expr_extract_eq_or(struct expr **ep1, struct expr **ep2);
18 static void expr_extract_eq(enum expr_type type, struct expr **ep, struct expr **ep1, struct expr *…
20 struct expr *expr_alloc_symbol(struct symbol *sym) in expr_alloc_symbol()
22 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_symbol()
28 struct expr *expr_alloc_one(enum expr_type type, struct expr *ce) in expr_alloc_one()
30 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_one()
32 e->left.expr = ce; in expr_alloc_one()
36 struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2) in expr_alloc_two()
38 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_two()
40 e->left.expr = e1; in expr_alloc_two()
41 e->right.expr = e2; in expr_alloc_two()
45 struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2) in expr_alloc_comp()
47 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_comp()
54 struct expr *expr_alloc_and(struct expr *e1, struct expr *e2) in expr_alloc_and()
61 struct expr *expr_alloc_or(struct expr *e1, struct expr *e2) in expr_alloc_or()
68 struct expr *expr_copy(const struct expr *org) in expr_copy()
70 struct expr *e; in expr_copy()
82 e->left.expr = expr_copy(org->left.expr); in expr_copy()
92 e->left.expr = expr_copy(org->left.expr); in expr_copy()
93 e->right.expr = expr_copy(org->right.expr); in expr_copy()
105 void expr_free(struct expr *e) in expr_free()
114 expr_free(e->left.expr); in expr_free()
121 expr_free(e->left.expr); in expr_free()
122 expr_free(e->right.expr); in expr_free()
136 static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct expr **ep2) in __expr_eliminate_eq()
139 __expr_eliminate_eq(type, &e1->left.expr, &e2); in __expr_eliminate_eq()
140 __expr_eliminate_eq(type, &e1->right.expr, &e2); in __expr_eliminate_eq()
144 __expr_eliminate_eq(type, &e1, &e2->left.expr); in __expr_eliminate_eq()
145 __expr_eliminate_eq(type, &e1, &e2->right.expr); in __expr_eliminate_eq()
170 void expr_eliminate_eq(struct expr **ep1, struct expr **ep2) in expr_eliminate_eq()
195 static int expr_eq(struct expr *e1, struct expr *e2) in expr_eq()
208 return expr_eq(e1->left.expr, e2->left.expr); in expr_eq()
237 static struct expr *expr_eliminate_yn(struct expr *e) in expr_eliminate_yn()
239 struct expr *tmp; in expr_eliminate_yn()
243 e->left.expr = expr_eliminate_yn(e->left.expr); in expr_eliminate_yn()
244 e->right.expr = expr_eliminate_yn(e->right.expr); in expr_eliminate_yn()
245 if (e->left.expr->type == E_SYMBOL) { in expr_eliminate_yn()
246 if (e->left.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
247 expr_free(e->left.expr); in expr_eliminate_yn()
248 expr_free(e->right.expr); in expr_eliminate_yn()
251 e->right.expr = NULL; in expr_eliminate_yn()
253 } else if (e->left.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
254 free(e->left.expr); in expr_eliminate_yn()
255 tmp = e->right.expr; in expr_eliminate_yn()
256 *e = *(e->right.expr); in expr_eliminate_yn()
261 if (e->right.expr->type == E_SYMBOL) { in expr_eliminate_yn()
262 if (e->right.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
263 expr_free(e->left.expr); in expr_eliminate_yn()
264 expr_free(e->right.expr); in expr_eliminate_yn()
267 e->right.expr = NULL; in expr_eliminate_yn()
269 } else if (e->right.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
270 free(e->right.expr); in expr_eliminate_yn()
271 tmp = e->left.expr; in expr_eliminate_yn()
272 *e = *(e->left.expr); in expr_eliminate_yn()
279 e->left.expr = expr_eliminate_yn(e->left.expr); in expr_eliminate_yn()
280 e->right.expr = expr_eliminate_yn(e->right.expr); in expr_eliminate_yn()
281 if (e->left.expr->type == E_SYMBOL) { in expr_eliminate_yn()
282 if (e->left.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
283 free(e->left.expr); in expr_eliminate_yn()
284 tmp = e->right.expr; in expr_eliminate_yn()
285 *e = *(e->right.expr); in expr_eliminate_yn()
288 } else if (e->left.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
289 expr_free(e->left.expr); in expr_eliminate_yn()
290 expr_free(e->right.expr); in expr_eliminate_yn()
293 e->right.expr = NULL; in expr_eliminate_yn()
297 if (e->right.expr->type == E_SYMBOL) { in expr_eliminate_yn()
298 if (e->right.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
299 free(e->right.expr); in expr_eliminate_yn()
300 tmp = e->left.expr; in expr_eliminate_yn()
301 *e = *(e->left.expr); in expr_eliminate_yn()
304 } else if (e->right.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
305 expr_free(e->left.expr); in expr_eliminate_yn()
306 expr_free(e->right.expr); in expr_eliminate_yn()
309 e->right.expr = NULL; in expr_eliminate_yn()
323 struct expr *expr_trans_bool(struct expr *e) in expr_trans_bool()
331 e->left.expr = expr_trans_bool(e->left.expr); in expr_trans_bool()
332 e->right.expr = expr_trans_bool(e->right.expr); in expr_trans_bool()
352 static struct expr *expr_join_or(struct expr *e1, struct expr *e2) in expr_join_or()
354 struct expr *tmp; in expr_join_or()
364 tmp = e1->left.expr; in expr_join_or()
371 if (e2->left.expr->type != E_SYMBOL) in expr_join_or()
373 sym2 = e2->left.expr->left.sym; in expr_join_or()
401 if ((e1->type == E_NOT && e1->left.expr->type == E_SYMBOL && e2->type == E_SYMBOL) || in expr_join_or()
402 (e2->type == E_NOT && e2->left.expr->type == E_SYMBOL && e1->type == E_SYMBOL)) in expr_join_or()
416 static struct expr *expr_join_and(struct expr *e1, struct expr *e2) in expr_join_and()
418 struct expr *tmp; in expr_join_and()
428 tmp = e1->left.expr; in expr_join_and()
435 if (e2->left.expr->type != E_SYMBOL) in expr_join_and()
437 sym2 = e2->left.expr->left.sym; in expr_join_and()
510 static void expr_eliminate_dups1(enum expr_type type, struct expr **ep1, struct expr **ep2) in expr_eliminate_dups1()
514 struct expr *tmp; in expr_eliminate_dups1()
517 expr_eliminate_dups1(type, &e1->left.expr, &e2); in expr_eliminate_dups1()
518 expr_eliminate_dups1(type, &e1->right.expr, &e2); in expr_eliminate_dups1()
522 expr_eliminate_dups1(type, &e1, &e2->left.expr); in expr_eliminate_dups1()
523 expr_eliminate_dups1(type, &e1, &e2->right.expr); in expr_eliminate_dups1()
562 static void expr_eliminate_dups2(enum expr_type type, struct expr **ep1, struct expr **ep2) in expr_eliminate_dups2()
566 struct expr *tmp, *tmp1, *tmp2; in expr_eliminate_dups2()
569 expr_eliminate_dups2(type, &e1->left.expr, &e2); in expr_eliminate_dups2()
570 expr_eliminate_dups2(type, &e1->right.expr, &e2); in expr_eliminate_dups2()
574 expr_eliminate_dups2(type, &e1, &e2->left.expr); in expr_eliminate_dups2()
575 expr_eliminate_dups2(type, &e1, &e2->right.expr); in expr_eliminate_dups2()
618 struct expr *expr_eliminate_dups(struct expr *e) in expr_eliminate_dups()
642 struct expr *expr_transform(struct expr *e) in expr_transform()
644 struct expr *tmp; in expr_transform()
655 e->left.expr = expr_transform(e->left.expr); in expr_transform()
656 e->right.expr = expr_transform(e->right.expr); in expr_transform()
665 e->left.expr = expr_alloc_symbol(e->left.sym); in expr_transform()
699 e->left.expr = expr_alloc_symbol(e->left.sym); in expr_transform()
705 switch (e->left.expr->type) { in expr_transform()
708 tmp = e->left.expr->left.expr; in expr_transform()
709 free(e->left.expr); in expr_transform()
717 tmp = e->left.expr; in expr_transform()
724 tmp = e->left.expr; in expr_transform()
726 e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); in expr_transform()
728 tmp->right.expr = NULL; in expr_transform()
733 tmp = e->left.expr; in expr_transform()
735 e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); in expr_transform()
737 tmp->right.expr = NULL; in expr_transform()
741 if (e->left.expr->left.sym == &symbol_yes) { in expr_transform()
743 tmp = e->left.expr; in expr_transform()
750 if (e->left.expr->left.sym == &symbol_mod) { in expr_transform()
752 tmp = e->left.expr; in expr_transform()
759 if (e->left.expr->left.sym == &symbol_no) { in expr_transform()
761 tmp = e->left.expr; in expr_transform()
779 int expr_contains_symbol(struct expr *dep, struct symbol *sym) in expr_contains_symbol()
787 return expr_contains_symbol(dep->left.expr, sym) || in expr_contains_symbol()
788 expr_contains_symbol(dep->right.expr, sym); in expr_contains_symbol()
796 return expr_contains_symbol(dep->left.expr, sym); in expr_contains_symbol()
803 bool expr_depends_symbol(struct expr *dep, struct symbol *sym) in expr_depends_symbol()
810 return expr_depends_symbol(dep->left.expr, sym) || in expr_depends_symbol()
811 expr_depends_symbol(dep->right.expr, sym); in expr_depends_symbol()
832 static struct expr *expr_extract_eq_and(struct expr **ep1, struct expr **ep2) in expr_extract_eq_and()
834 struct expr *tmp = NULL; in expr_extract_eq_and()
843 static struct expr *expr_extract_eq_or(struct expr **ep1, struct expr **ep2) in expr_extract_eq_or()
845 struct expr *tmp = NULL; in expr_extract_eq_or()
854 static void expr_extract_eq(enum expr_type type, struct expr **ep, struct expr **ep1, struct expr *… in expr_extract_eq()
859 expr_extract_eq(type, ep, &e1->left.expr, &e2); in expr_extract_eq()
860 expr_extract_eq(type, ep, &e1->right.expr, &e2); in expr_extract_eq()
864 expr_extract_eq(type, ep, ep1, &e2->left.expr); in expr_extract_eq()
865 expr_extract_eq(type, ep, ep1, &e2->right.expr); in expr_extract_eq()
883 struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym) in expr_trans_compare()
885 struct expr *e1, *e2; in expr_trans_compare()
895 e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); in expr_trans_compare()
896 e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym); in expr_trans_compare()
905 e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); in expr_trans_compare()
906 e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym); in expr_trans_compare()
915 return expr_trans_compare(e->left.expr, type == E_EQUAL ? E_UNEQUAL : E_EQUAL, sym); in expr_trans_compare()
944 tristate expr_calc_value(struct expr *e) in expr_calc_value()
957 val1 = expr_calc_value(e->left.expr); in expr_calc_value()
958 val2 = expr_calc_value(e->right.expr); in expr_calc_value()
961 val1 = expr_calc_value(e->left.expr); in expr_calc_value()
962 val2 = expr_calc_value(e->right.expr); in expr_calc_value()
965 val1 = expr_calc_value(e->left.expr); in expr_calc_value()
1013 static inline struct expr *
1014 expr_get_leftmost_symbol(const struct expr *e) in expr_get_leftmost_symbol()
1021 e = e->left.expr; in expr_get_leftmost_symbol()
1030 struct expr *expr_simplify_unmet_dep(struct expr *e1, struct expr *e2) in expr_simplify_unmet_dep()
1032 struct expr *ret; in expr_simplify_unmet_dep()
1037 expr_simplify_unmet_dep(e1->left.expr, e2), in expr_simplify_unmet_dep()
1038 expr_simplify_unmet_dep(e1->right.expr, e2)); in expr_simplify_unmet_dep()
1040 struct expr *e; in expr_simplify_unmet_dep()
1055 void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int … in expr_print()
1073 expr_print(e->left.expr, fn, data, E_NOT); in expr_print()
1092 expr_print(e->left.expr, fn, data, E_OR); in expr_print()
1094 expr_print(e->right.expr, fn, data, E_OR); in expr_print()
1097 expr_print(e->left.expr, fn, data, E_AND); in expr_print()
1099 expr_print(e->right.expr, fn, data, E_AND); in expr_print()
1103 if (e->left.expr) { in expr_print()
1105 expr_print(e->left.expr, fn, data, E_LIST); in expr_print()
1132 void expr_fprint(struct expr *e, FILE *out) in expr_fprint()
1167 void expr_gstr_print(struct expr *e, struct gstr *gs) in expr_gstr_print()