Lines Matching refs:expr
14 struct expr *expr_alloc_symbol(struct symbol *sym) in expr_alloc_symbol()
16 struct expr *e = calloc(1, sizeof(*e)); in expr_alloc_symbol()
22 struct expr *expr_alloc_one(enum expr_type type, struct expr *ce) in expr_alloc_one()
24 struct expr *e = calloc(1, sizeof(*e)); in expr_alloc_one()
26 e->left.expr = ce; in expr_alloc_one()
30 struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2) in expr_alloc_two()
32 struct expr *e = calloc(1, sizeof(*e)); in expr_alloc_two()
34 e->left.expr = e1; in expr_alloc_two()
35 e->right.expr = e2; in expr_alloc_two()
39 struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2) in expr_alloc_comp()
41 struct expr *e = calloc(1, sizeof(*e)); in expr_alloc_comp()
48 struct expr *expr_alloc_and(struct expr *e1, struct expr *e2) in expr_alloc_and()
55 struct expr *expr_alloc_or(struct expr *e1, struct expr *e2) in expr_alloc_or()
62 struct expr *expr_copy(const struct expr *org) in expr_copy()
64 struct expr *e; in expr_copy()
76 e->left.expr = expr_copy(org->left.expr); in expr_copy()
86 e->left.expr = expr_copy(org->left.expr); in expr_copy()
87 e->right.expr = expr_copy(org->right.expr); in expr_copy()
99 void expr_free(struct expr *e) in expr_free()
108 expr_free(e->left.expr); in expr_free()
115 expr_free(e->left.expr); in expr_free()
116 expr_free(e->right.expr); in expr_free()
130 static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct expr **ep2) in __expr_eliminate_eq()
133 __expr_eliminate_eq(type, &e1->left.expr, &e2); in __expr_eliminate_eq()
134 __expr_eliminate_eq(type, &e1->right.expr, &e2); in __expr_eliminate_eq()
138 __expr_eliminate_eq(type, &e1, &e2->left.expr); in __expr_eliminate_eq()
139 __expr_eliminate_eq(type, &e1, &e2->right.expr); in __expr_eliminate_eq()
164 void expr_eliminate_eq(struct expr **ep1, struct expr **ep2) in expr_eliminate_eq()
189 int expr_eq(struct expr *e1, struct expr *e2) in expr_eq()
202 return expr_eq(e1->left.expr, e2->left.expr); in expr_eq()
231 struct expr *expr_eliminate_yn(struct expr *e) in expr_eliminate_yn()
233 struct expr *tmp; in expr_eliminate_yn()
237 e->left.expr = expr_eliminate_yn(e->left.expr); in expr_eliminate_yn()
238 e->right.expr = expr_eliminate_yn(e->right.expr); in expr_eliminate_yn()
239 if (e->left.expr->type == E_SYMBOL) { in expr_eliminate_yn()
240 if (e->left.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
241 expr_free(e->left.expr); in expr_eliminate_yn()
242 expr_free(e->right.expr); in expr_eliminate_yn()
245 e->right.expr = NULL; in expr_eliminate_yn()
247 } else if (e->left.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
248 free(e->left.expr); in expr_eliminate_yn()
249 tmp = e->right.expr; in expr_eliminate_yn()
250 *e = *(e->right.expr); in expr_eliminate_yn()
255 if (e->right.expr->type == E_SYMBOL) { in expr_eliminate_yn()
256 if (e->right.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
257 expr_free(e->left.expr); in expr_eliminate_yn()
258 expr_free(e->right.expr); in expr_eliminate_yn()
261 e->right.expr = NULL; in expr_eliminate_yn()
263 } else if (e->right.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
264 free(e->right.expr); in expr_eliminate_yn()
265 tmp = e->left.expr; in expr_eliminate_yn()
266 *e = *(e->left.expr); in expr_eliminate_yn()
273 e->left.expr = expr_eliminate_yn(e->left.expr); in expr_eliminate_yn()
274 e->right.expr = expr_eliminate_yn(e->right.expr); in expr_eliminate_yn()
275 if (e->left.expr->type == E_SYMBOL) { in expr_eliminate_yn()
276 if (e->left.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
277 free(e->left.expr); in expr_eliminate_yn()
278 tmp = e->right.expr; in expr_eliminate_yn()
279 *e = *(e->right.expr); in expr_eliminate_yn()
282 } else if (e->left.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
283 expr_free(e->left.expr); in expr_eliminate_yn()
284 expr_free(e->right.expr); in expr_eliminate_yn()
287 e->right.expr = NULL; in expr_eliminate_yn()
291 if (e->right.expr->type == E_SYMBOL) { in expr_eliminate_yn()
292 if (e->right.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
293 free(e->right.expr); in expr_eliminate_yn()
294 tmp = e->left.expr; in expr_eliminate_yn()
295 *e = *(e->left.expr); in expr_eliminate_yn()
298 } else if (e->right.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
299 expr_free(e->left.expr); in expr_eliminate_yn()
300 expr_free(e->right.expr); in expr_eliminate_yn()
303 e->right.expr = NULL; in expr_eliminate_yn()
317 struct expr *expr_trans_bool(struct expr *e) in expr_trans_bool()
325 e->left.expr = expr_trans_bool(e->left.expr); in expr_trans_bool()
326 e->right.expr = expr_trans_bool(e->right.expr); in expr_trans_bool()
346 static struct expr *expr_join_or(struct expr *e1, struct expr *e2) in expr_join_or()
348 struct expr *tmp; in expr_join_or()
358 tmp = e1->left.expr; in expr_join_or()
365 if (e2->left.expr->type != E_SYMBOL) in expr_join_or()
367 sym2 = e2->left.expr->left.sym; in expr_join_or()
395 if ((e1->type == E_NOT && e1->left.expr->type == E_SYMBOL && e2->type == E_SYMBOL) || in expr_join_or()
396 (e2->type == E_NOT && e2->left.expr->type == E_SYMBOL && e1->type == E_SYMBOL)) in expr_join_or()
410 static struct expr *expr_join_and(struct expr *e1, struct expr *e2) in expr_join_and()
412 struct expr *tmp; in expr_join_and()
422 tmp = e1->left.expr; in expr_join_and()
429 if (e2->left.expr->type != E_SYMBOL) in expr_join_and()
431 sym2 = e2->left.expr->left.sym; in expr_join_and()
504 static void expr_eliminate_dups1(enum expr_type type, struct expr **ep1, struct expr **ep2) in expr_eliminate_dups1()
508 struct expr *tmp; in expr_eliminate_dups1()
511 expr_eliminate_dups1(type, &e1->left.expr, &e2); in expr_eliminate_dups1()
512 expr_eliminate_dups1(type, &e1->right.expr, &e2); in expr_eliminate_dups1()
516 expr_eliminate_dups1(type, &e1, &e2->left.expr); in expr_eliminate_dups1()
517 expr_eliminate_dups1(type, &e1, &e2->right.expr); in expr_eliminate_dups1()
556 static void expr_eliminate_dups2(enum expr_type type, struct expr **ep1, struct expr **ep2) in expr_eliminate_dups2()
560 struct expr *tmp, *tmp1, *tmp2; in expr_eliminate_dups2()
563 expr_eliminate_dups2(type, &e1->left.expr, &e2); in expr_eliminate_dups2()
564 expr_eliminate_dups2(type, &e1->right.expr, &e2); in expr_eliminate_dups2()
568 expr_eliminate_dups2(type, &e1, &e2->left.expr); in expr_eliminate_dups2()
569 expr_eliminate_dups2(type, &e1, &e2->right.expr); in expr_eliminate_dups2()
612 struct expr *expr_eliminate_dups(struct expr *e) in expr_eliminate_dups()
636 struct expr *expr_transform(struct expr *e) in expr_transform()
638 struct expr *tmp; in expr_transform()
649 e->left.expr = expr_transform(e->left.expr); in expr_transform()
650 e->right.expr = expr_transform(e->right.expr); in expr_transform()
659 e->left.expr = expr_alloc_symbol(e->left.sym); in expr_transform()
693 e->left.expr = expr_alloc_symbol(e->left.sym); in expr_transform()
699 switch (e->left.expr->type) { in expr_transform()
702 tmp = e->left.expr->left.expr; in expr_transform()
703 free(e->left.expr); in expr_transform()
711 tmp = e->left.expr; in expr_transform()
718 tmp = e->left.expr; in expr_transform()
720 e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); in expr_transform()
722 tmp->right.expr = NULL; in expr_transform()
727 tmp = e->left.expr; in expr_transform()
729 e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); in expr_transform()
731 tmp->right.expr = NULL; in expr_transform()
735 if (e->left.expr->left.sym == &symbol_yes) { in expr_transform()
737 tmp = e->left.expr; in expr_transform()
744 if (e->left.expr->left.sym == &symbol_mod) { in expr_transform()
746 tmp = e->left.expr; in expr_transform()
753 if (e->left.expr->left.sym == &symbol_no) { in expr_transform()
755 tmp = e->left.expr; in expr_transform()
773 int expr_contains_symbol(struct expr *dep, struct symbol *sym) in expr_contains_symbol()
781 return expr_contains_symbol(dep->left.expr, sym) || in expr_contains_symbol()
782 expr_contains_symbol(dep->right.expr, sym); in expr_contains_symbol()
790 return expr_contains_symbol(dep->left.expr, sym); in expr_contains_symbol()
797 bool expr_depends_symbol(struct expr *dep, struct symbol *sym) in expr_depends_symbol()
804 return expr_depends_symbol(dep->left.expr, sym) || in expr_depends_symbol()
805 expr_depends_symbol(dep->right.expr, sym); in expr_depends_symbol()
826 struct expr *expr_extract_eq_and(struct expr **ep1, struct expr **ep2) in expr_extract_eq_and()
828 struct expr *tmp = NULL; in expr_extract_eq_and()
837 struct expr *expr_extract_eq_or(struct expr **ep1, struct expr **ep2) in expr_extract_eq_or()
839 struct expr *tmp = NULL; in expr_extract_eq_or()
848 void expr_extract_eq(enum expr_type type, struct expr **ep, struct expr **ep1, struct expr **ep2) in expr_extract_eq()
853 expr_extract_eq(type, ep, &e1->left.expr, &e2); in expr_extract_eq()
854 expr_extract_eq(type, ep, &e1->right.expr, &e2); in expr_extract_eq()
858 expr_extract_eq(type, ep, ep1, &e2->left.expr); in expr_extract_eq()
859 expr_extract_eq(type, ep, ep1, &e2->right.expr); in expr_extract_eq()
877 struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym) in expr_trans_compare()
879 struct expr *e1, *e2; in expr_trans_compare()
889 e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); in expr_trans_compare()
890 e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym); in expr_trans_compare()
899 e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); in expr_trans_compare()
900 e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym); in expr_trans_compare()
909 return expr_trans_compare(e->left.expr, type == E_EQUAL ? E_UNEQUAL : E_EQUAL, sym); in expr_trans_compare()
938 tristate expr_calc_value(struct expr *e) in expr_calc_value()
951 val1 = expr_calc_value(e->left.expr); in expr_calc_value()
952 val2 = expr_calc_value(e->right.expr); in expr_calc_value()
955 val1 = expr_calc_value(e->left.expr); in expr_calc_value()
956 val2 = expr_calc_value(e->right.expr); in expr_calc_value()
959 val1 = expr_calc_value(e->left.expr); in expr_calc_value()
1011 static inline struct expr *
1012 expr_get_leftmost_symbol(const struct expr *e) in expr_get_leftmost_symbol()
1019 e = e->left.expr; in expr_get_leftmost_symbol()
1028 struct expr *expr_simplify_unmet_dep(struct expr *e1, struct expr *e2) in expr_simplify_unmet_dep()
1030 struct expr *ret; in expr_simplify_unmet_dep()
1035 expr_simplify_unmet_dep(e1->left.expr, e2), in expr_simplify_unmet_dep()
1036 expr_simplify_unmet_dep(e1->right.expr, e2)); in expr_simplify_unmet_dep()
1038 struct expr *e; in expr_simplify_unmet_dep()
1053 void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int … in expr_print()
1071 expr_print(e->left.expr, fn, data, E_NOT); in expr_print()
1090 expr_print(e->left.expr, fn, data, E_OR); in expr_print()
1092 expr_print(e->right.expr, fn, data, E_OR); in expr_print()
1095 expr_print(e->left.expr, fn, data, E_AND); in expr_print()
1097 expr_print(e->right.expr, fn, data, E_AND); in expr_print()
1101 if (e->left.expr) { in expr_print()
1103 expr_print(e->left.expr, fn, data, E_LIST); in expr_print()
1130 void expr_fprint(struct expr *e, FILE *out) in expr_fprint()
1165 void expr_gstr_print(struct expr *e, struct gstr *gs) in expr_gstr_print()