Lines Matching refs:expr
16 static int expr_eq(struct expr *e1, struct expr *e2);
17 static struct expr *expr_eliminate_yn(struct expr *e);
19 struct expr *expr_alloc_symbol(struct symbol *sym) in expr_alloc_symbol()
21 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_symbol()
27 struct expr *expr_alloc_one(enum expr_type type, struct expr *ce) in expr_alloc_one()
29 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_one()
31 e->left.expr = ce; in expr_alloc_one()
35 struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2) in expr_alloc_two()
37 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_two()
39 e->left.expr = e1; in expr_alloc_two()
40 e->right.expr = e2; in expr_alloc_two()
44 struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2) in expr_alloc_comp()
46 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_comp()
53 struct expr *expr_alloc_and(struct expr *e1, struct expr *e2) in expr_alloc_and()
60 struct expr *expr_alloc_or(struct expr *e1, struct expr *e2) in expr_alloc_or()
67 struct expr *expr_copy(const struct expr *org) in expr_copy()
69 struct expr *e; in expr_copy()
81 e->left.expr = expr_copy(org->left.expr); in expr_copy()
95 e->left.expr = expr_copy(org->left.expr); in expr_copy()
96 e->right.expr = expr_copy(org->right.expr); in expr_copy()
108 void expr_free(struct expr *e) in expr_free()
117 expr_free(e->left.expr); in expr_free()
128 expr_free(e->left.expr); in expr_free()
129 expr_free(e->right.expr); in expr_free()
151 static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct expr **ep2) in __expr_eliminate_eq()
156 __expr_eliminate_eq(type, &e1->left.expr, &e2); in __expr_eliminate_eq()
157 __expr_eliminate_eq(type, &e1->right.expr, &e2); in __expr_eliminate_eq()
161 __expr_eliminate_eq(type, &e1, &e2->left.expr); in __expr_eliminate_eq()
162 __expr_eliminate_eq(type, &e1, &e2->right.expr); in __expr_eliminate_eq()
222 void expr_eliminate_eq(struct expr **ep1, struct expr **ep2) in expr_eliminate_eq()
253 static int expr_eq(struct expr *e1, struct expr *e2) in expr_eq()
270 return expr_eq(e1->left.expr, e2->left.expr); in expr_eq()
310 static struct expr *expr_eliminate_yn(struct expr *e) in expr_eliminate_yn()
312 struct expr *tmp; in expr_eliminate_yn()
316 e->left.expr = expr_eliminate_yn(e->left.expr); in expr_eliminate_yn()
317 e->right.expr = expr_eliminate_yn(e->right.expr); in expr_eliminate_yn()
318 if (e->left.expr->type == E_SYMBOL) { in expr_eliminate_yn()
319 if (e->left.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
320 expr_free(e->left.expr); in expr_eliminate_yn()
321 expr_free(e->right.expr); in expr_eliminate_yn()
324 e->right.expr = NULL; in expr_eliminate_yn()
326 } else if (e->left.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
327 free(e->left.expr); in expr_eliminate_yn()
328 tmp = e->right.expr; in expr_eliminate_yn()
329 *e = *(e->right.expr); in expr_eliminate_yn()
334 if (e->right.expr->type == E_SYMBOL) { in expr_eliminate_yn()
335 if (e->right.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
336 expr_free(e->left.expr); in expr_eliminate_yn()
337 expr_free(e->right.expr); in expr_eliminate_yn()
340 e->right.expr = NULL; in expr_eliminate_yn()
342 } else if (e->right.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
343 free(e->right.expr); in expr_eliminate_yn()
344 tmp = e->left.expr; in expr_eliminate_yn()
345 *e = *(e->left.expr); in expr_eliminate_yn()
352 e->left.expr = expr_eliminate_yn(e->left.expr); in expr_eliminate_yn()
353 e->right.expr = expr_eliminate_yn(e->right.expr); in expr_eliminate_yn()
354 if (e->left.expr->type == E_SYMBOL) { in expr_eliminate_yn()
355 if (e->left.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
356 free(e->left.expr); in expr_eliminate_yn()
357 tmp = e->right.expr; in expr_eliminate_yn()
358 *e = *(e->right.expr); in expr_eliminate_yn()
361 } else if (e->left.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
362 expr_free(e->left.expr); in expr_eliminate_yn()
363 expr_free(e->right.expr); in expr_eliminate_yn()
366 e->right.expr = NULL; in expr_eliminate_yn()
370 if (e->right.expr->type == E_SYMBOL) { in expr_eliminate_yn()
371 if (e->right.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
372 free(e->right.expr); in expr_eliminate_yn()
373 tmp = e->left.expr; in expr_eliminate_yn()
374 *e = *(e->left.expr); in expr_eliminate_yn()
377 } else if (e->right.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
378 expr_free(e->left.expr); in expr_eliminate_yn()
379 expr_free(e->right.expr); in expr_eliminate_yn()
382 e->right.expr = NULL; in expr_eliminate_yn()
396 struct expr *expr_trans_bool(struct expr *e) in expr_trans_bool()
404 e->left.expr = expr_trans_bool(e->left.expr); in expr_trans_bool()
405 e->right.expr = expr_trans_bool(e->right.expr); in expr_trans_bool()
425 static struct expr *expr_join_or(struct expr *e1, struct expr *e2) in expr_join_or()
427 struct expr *tmp; in expr_join_or()
437 tmp = e1->left.expr; in expr_join_or()
444 if (e2->left.expr->type != E_SYMBOL) in expr_join_or()
446 sym2 = e2->left.expr->left.sym; in expr_join_or()
474 if ((e1->type == E_NOT && e1->left.expr->type == E_SYMBOL && e2->type == E_SYMBOL) || in expr_join_or()
475 (e2->type == E_NOT && e2->left.expr->type == E_SYMBOL && e1->type == E_SYMBOL)) in expr_join_or()
489 static struct expr *expr_join_and(struct expr *e1, struct expr *e2) in expr_join_and()
491 struct expr *tmp; in expr_join_and()
501 tmp = e1->left.expr; in expr_join_and()
508 if (e2->left.expr->type != E_SYMBOL) in expr_join_and()
510 sym2 = e2->left.expr->left.sym; in expr_join_and()
590 static void expr_eliminate_dups1(enum expr_type type, struct expr **ep1, struct expr **ep2) in expr_eliminate_dups1()
594 struct expr *tmp; in expr_eliminate_dups1()
599 expr_eliminate_dups1(type, &e1->left.expr, &e2); in expr_eliminate_dups1()
600 expr_eliminate_dups1(type, &e1->right.expr, &e2); in expr_eliminate_dups1()
604 expr_eliminate_dups1(type, &e1, &e2->left.expr); in expr_eliminate_dups1()
605 expr_eliminate_dups1(type, &e1, &e2->right.expr); in expr_eliminate_dups1()
658 struct expr *expr_eliminate_dups(struct expr *e) in expr_eliminate_dups()
688 struct expr *expr_transform(struct expr *e) in expr_transform()
690 struct expr *tmp; in expr_transform()
705 e->left.expr = expr_transform(e->left.expr); in expr_transform()
706 e->right.expr = expr_transform(e->right.expr); in expr_transform()
715 e->left.expr = expr_alloc_symbol(e->left.sym); in expr_transform()
749 e->left.expr = expr_alloc_symbol(e->left.sym); in expr_transform()
755 switch (e->left.expr->type) { in expr_transform()
758 tmp = e->left.expr->left.expr; in expr_transform()
759 free(e->left.expr); in expr_transform()
767 tmp = e->left.expr; in expr_transform()
775 tmp = e->left.expr; in expr_transform()
783 tmp = e->left.expr; in expr_transform()
790 tmp = e->left.expr; in expr_transform()
792 e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); in expr_transform()
794 tmp->right.expr = NULL; in expr_transform()
799 tmp = e->left.expr; in expr_transform()
801 e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); in expr_transform()
803 tmp->right.expr = NULL; in expr_transform()
807 if (e->left.expr->left.sym == &symbol_yes) { in expr_transform()
809 tmp = e->left.expr; in expr_transform()
816 if (e->left.expr->left.sym == &symbol_mod) { in expr_transform()
818 tmp = e->left.expr; in expr_transform()
825 if (e->left.expr->left.sym == &symbol_no) { in expr_transform()
827 tmp = e->left.expr; in expr_transform()
845 int expr_contains_symbol(struct expr *dep, struct symbol *sym) in expr_contains_symbol()
853 return expr_contains_symbol(dep->left.expr, sym) || in expr_contains_symbol()
854 expr_contains_symbol(dep->right.expr, sym); in expr_contains_symbol()
866 return expr_contains_symbol(dep->left.expr, sym); in expr_contains_symbol()
873 bool expr_depends_symbol(struct expr *dep, struct symbol *sym) in expr_depends_symbol()
880 return expr_depends_symbol(dep->left.expr, sym) || in expr_depends_symbol()
881 expr_depends_symbol(dep->right.expr, sym); in expr_depends_symbol()
916 struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym) in expr_trans_compare()
918 struct expr *e1, *e2; in expr_trans_compare()
928 e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); in expr_trans_compare()
929 e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym); in expr_trans_compare()
938 e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); in expr_trans_compare()
939 e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym); in expr_trans_compare()
948 return expr_trans_compare(e->left.expr, type == E_EQUAL ? E_UNEQUAL : E_EQUAL, sym); in expr_trans_compare()
1024 tristate expr_calc_value(struct expr *e) in expr_calc_value()
1040 val1 = expr_calc_value(e->left.expr); in expr_calc_value()
1041 val2 = expr_calc_value(e->right.expr); in expr_calc_value()
1044 val1 = expr_calc_value(e->left.expr); in expr_calc_value()
1045 val2 = expr_calc_value(e->right.expr); in expr_calc_value()
1048 val1 = expr_calc_value(e->left.expr); in expr_calc_value()
1132 void expr_print(struct expr *e, in expr_print()
1152 expr_print(e->left.expr, fn, data, E_NOT); in expr_print()
1189 expr_print(e->left.expr, fn, data, E_OR); in expr_print()
1191 expr_print(e->right.expr, fn, data, E_OR); in expr_print()
1194 expr_print(e->left.expr, fn, data, E_AND); in expr_print()
1196 expr_print(e->right.expr, fn, data, E_AND); in expr_print()
1200 if (e->left.expr) { in expr_print()
1202 expr_print(e->left.expr, fn, data, E_LIST); in expr_print()
1229 void expr_fprint(struct expr *e, FILE *out) in expr_fprint()
1264 void expr_gstr_print(struct expr *e, struct gstr *gs) in expr_gstr_print()
1274 static void expr_print_revdep(struct expr *e, in expr_print_revdep()
1279 expr_print_revdep(e->left.expr, fn, data, pr_type, title); in expr_print_revdep()
1280 expr_print_revdep(e->right.expr, fn, data, pr_type, title); in expr_print_revdep()
1293 void expr_gstr_print_revdep(struct expr *e, struct gstr *gs, in expr_gstr_print_revdep()