Lines Matching refs:e

15 static struct expr *expr_eliminate_yn(struct expr *e);
22 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_symbol() local
23 e->type = E_SYMBOL; in expr_alloc_symbol()
24 e->left.sym = sym; in expr_alloc_symbol()
25 return e; in expr_alloc_symbol()
30 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_one() local
31 e->type = type; in expr_alloc_one()
32 e->left.expr = ce; in expr_alloc_one()
33 return e; in expr_alloc_one()
38 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_two() local
39 e->type = type; in expr_alloc_two()
40 e->left.expr = e1; in expr_alloc_two()
41 e->right.expr = e2; in expr_alloc_two()
42 return e; in expr_alloc_two()
47 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_comp() local
48 e->type = type; in expr_alloc_comp()
49 e->left.sym = s1; in expr_alloc_comp()
50 e->right.sym = s2; in expr_alloc_comp()
51 return e; in expr_alloc_comp()
70 struct expr *e; in expr_copy() local
75 e = xmalloc(sizeof(*org)); in expr_copy()
76 memcpy(e, org, sizeof(*org)); in expr_copy()
79 e->left = org->left; in expr_copy()
82 e->left.expr = expr_copy(org->left.expr); in expr_copy()
86 e->left.sym = org->left.sym; in expr_copy()
87 e->right.sym = org->right.sym; 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()
96 printf("can't copy type %d\n", e->type); in expr_copy()
97 free(e); in expr_copy()
98 e = NULL; in expr_copy()
102 return e; in expr_copy()
105 void expr_free(struct expr *e) in expr_free() argument
107 if (!e) in expr_free()
110 switch (e->type) { 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()
125 printf("how to free type %d?\n", e->type); in expr_free()
128 free(e); in expr_free()
237 static struct expr *expr_eliminate_yn(struct expr *e) in expr_eliminate_yn() argument
241 if (e) switch (e->type) { 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()
249 e->type = E_SYMBOL; in expr_eliminate_yn()
250 e->left.sym = &symbol_no; in expr_eliminate_yn()
251 e->right.expr = NULL; in expr_eliminate_yn()
252 return e; 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()
258 return e; 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()
265 e->type = E_SYMBOL; in expr_eliminate_yn()
266 e->left.sym = &symbol_no; in expr_eliminate_yn()
267 e->right.expr = NULL; in expr_eliminate_yn()
268 return e; 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()
274 return e; 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()
287 return e; 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()
291 e->type = E_SYMBOL; in expr_eliminate_yn()
292 e->left.sym = &symbol_yes; in expr_eliminate_yn()
293 e->right.expr = NULL; in expr_eliminate_yn()
294 return e; 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()
303 return e; 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()
307 e->type = E_SYMBOL; in expr_eliminate_yn()
308 e->left.sym = &symbol_yes; in expr_eliminate_yn()
309 e->right.expr = NULL; in expr_eliminate_yn()
310 return e; in expr_eliminate_yn()
317 return e; in expr_eliminate_yn()
323 struct expr *expr_trans_bool(struct expr *e) in expr_trans_bool() argument
325 if (!e) in expr_trans_bool()
327 switch (e->type) { 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()
336 if (e->left.sym->type == S_TRISTATE) { in expr_trans_bool()
337 if (e->right.sym == &symbol_no) { in expr_trans_bool()
338 e->type = E_SYMBOL; in expr_trans_bool()
339 e->right.sym = NULL; in expr_trans_bool()
346 return e; in expr_trans_bool()
618 struct expr *expr_eliminate_dups(struct expr *e) in expr_eliminate_dups() argument
621 if (!e) in expr_eliminate_dups()
622 return e; in expr_eliminate_dups()
627 switch (e->type) { in expr_eliminate_dups()
629 expr_eliminate_dups1(e->type, &e, &e); in expr_eliminate_dups()
630 expr_eliminate_dups2(e->type, &e, &e); in expr_eliminate_dups()
636 e = expr_eliminate_yn(e); in expr_eliminate_dups()
639 return e; in expr_eliminate_dups()
642 struct expr *expr_transform(struct expr *e) in expr_transform() argument
646 if (!e) in expr_transform()
648 switch (e->type) { 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()
659 switch (e->type) { in expr_transform()
661 if (e->left.sym->type != S_BOOLEAN) in expr_transform()
663 if (e->right.sym == &symbol_no) { in expr_transform()
664 e->type = E_NOT; in expr_transform()
665 e->left.expr = expr_alloc_symbol(e->left.sym); in expr_transform()
666 e->right.sym = NULL; in expr_transform()
669 if (e->right.sym == &symbol_mod) { in expr_transform()
670 printf("boolean symbol %s tested for 'm'? test forced to 'n'\n", e->left.sym->name); in expr_transform()
671 e->type = E_SYMBOL; in expr_transform()
672 e->left.sym = &symbol_no; in expr_transform()
673 e->right.sym = NULL; in expr_transform()
676 if (e->right.sym == &symbol_yes) { in expr_transform()
677 e->type = E_SYMBOL; in expr_transform()
678 e->right.sym = NULL; in expr_transform()
683 if (e->left.sym->type != S_BOOLEAN) in expr_transform()
685 if (e->right.sym == &symbol_no) { in expr_transform()
686 e->type = E_SYMBOL; in expr_transform()
687 e->right.sym = NULL; in expr_transform()
690 if (e->right.sym == &symbol_mod) { in expr_transform()
691 printf("boolean symbol %s tested for 'm'? test forced to 'y'\n", e->left.sym->name); in expr_transform()
692 e->type = E_SYMBOL; in expr_transform()
693 e->left.sym = &symbol_yes; in expr_transform()
694 e->right.sym = NULL; in expr_transform()
697 if (e->right.sym == &symbol_yes) { in expr_transform()
698 e->type = E_NOT; in expr_transform()
699 e->left.expr = expr_alloc_symbol(e->left.sym); in expr_transform()
700 e->right.sym = NULL; 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()
710 free(e); in expr_transform()
711 e = tmp; in expr_transform()
712 e = expr_transform(e); in expr_transform()
717 tmp = e->left.expr; in expr_transform()
718 free(e); in expr_transform()
719 e = tmp; in expr_transform()
720 e->type = e->type == E_EQUAL ? E_UNEQUAL : E_EQUAL; in expr_transform()
724 tmp = e->left.expr; in expr_transform()
725 e->type = E_AND; in expr_transform()
726 e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); in expr_transform()
729 e = expr_transform(e); in expr_transform()
733 tmp = e->left.expr; in expr_transform()
734 e->type = E_OR; in expr_transform()
735 e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); in expr_transform()
738 e = expr_transform(e); in expr_transform()
741 if (e->left.expr->left.sym == &symbol_yes) { in expr_transform()
743 tmp = e->left.expr; in expr_transform()
744 free(e); in expr_transform()
745 e = tmp; in expr_transform()
746 e->type = E_SYMBOL; in expr_transform()
747 e->left.sym = &symbol_no; in expr_transform()
750 if (e->left.expr->left.sym == &symbol_mod) { in expr_transform()
752 tmp = e->left.expr; in expr_transform()
753 free(e); in expr_transform()
754 e = tmp; in expr_transform()
755 e->type = E_SYMBOL; in expr_transform()
756 e->left.sym = &symbol_mod; in expr_transform()
759 if (e->left.expr->left.sym == &symbol_no) { in expr_transform()
761 tmp = e->left.expr; in expr_transform()
762 free(e); in expr_transform()
763 e = tmp; in expr_transform()
764 e->type = E_SYMBOL; in expr_transform()
765 e->left.sym = &symbol_yes; in expr_transform()
776 return e; in expr_transform()
883 struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym) in expr_trans_compare() argument
887 if (!e) { in expr_trans_compare()
888 e = expr_alloc_symbol(sym); in expr_trans_compare()
890 e = expr_alloc_one(E_NOT, e); in expr_trans_compare()
891 return e; in expr_trans_compare()
893 switch (e->type) { 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()
898 e = expr_alloc_two(E_AND, e1, e2); in expr_trans_compare()
900 e = expr_alloc_two(E_OR, e1, e2); in expr_trans_compare()
902 e = expr_alloc_one(E_NOT, e); in expr_trans_compare()
903 return e; 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()
908 e = expr_alloc_two(E_OR, e1, e2); in expr_trans_compare()
910 e = expr_alloc_two(E_AND, e1, e2); in expr_trans_compare()
912 e = expr_alloc_one(E_NOT, e); in expr_trans_compare()
913 return e; in expr_trans_compare()
915 return expr_trans_compare(e->left.expr, type == E_EQUAL ? E_UNEQUAL : E_EQUAL, sym); in expr_trans_compare()
920 return expr_copy(e); in expr_trans_compare()
924 return expr_alloc_one(E_NOT, expr_copy(e)); in expr_trans_compare()
927 return expr_alloc_one(E_NOT, expr_copy(e)); in expr_trans_compare()
931 return expr_copy(e); in expr_trans_compare()
935 return expr_alloc_comp(type, e->left.sym, sym); in expr_trans_compare()
944 tristate expr_calc_value(struct expr *e) in expr_calc_value() argument
949 if (!e) in expr_calc_value()
952 switch (e->type) { in expr_calc_value()
954 sym_calc_value(e->left.sym); in expr_calc_value()
955 return e->left.sym->curr.tri; 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()
968 sym_calc_value(e->left.sym); in expr_calc_value()
969 sym_calc_value(e->right.sym); in expr_calc_value()
970 str1 = sym_get_string_value(e->left.sym); in expr_calc_value()
971 str2 = sym_get_string_value(e->right.sym); in expr_calc_value()
974 sym_calc_value(e->left.sym); in expr_calc_value()
975 sym_calc_value(e->right.sym); in expr_calc_value()
976 str1 = sym_get_string_value(e->left.sym); in expr_calc_value()
977 str2 = sym_get_string_value(e->right.sym); in expr_calc_value()
980 printf("expr_calc_value: %d?\n", e->type); in expr_calc_value()
1014 expr_get_leftmost_symbol(const struct expr *e) in expr_get_leftmost_symbol() argument
1017 if (e == NULL) in expr_get_leftmost_symbol()
1020 while (e->type != E_SYMBOL) in expr_get_leftmost_symbol()
1021 e = e->left.expr; in expr_get_leftmost_symbol()
1023 return expr_copy(e); in expr_get_leftmost_symbol()
1040 struct expr *e; in expr_simplify_unmet_dep() local
1041 e = expr_alloc_and(expr_copy(e1), expr_copy(e2)); in expr_simplify_unmet_dep()
1042 e = expr_eliminate_dups(e); in expr_simplify_unmet_dep()
1043 ret = (!expr_eq(e, e1)) ? e1 : NULL; in expr_simplify_unmet_dep()
1044 expr_free(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() argument
1057 if (!e) { in expr_print()
1062 if (expr_compare_type(prevtoken, e->type) > 0) in expr_print()
1064 switch (e->type) { in expr_print()
1066 if (e->left.sym->name) in expr_print()
1067 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1073 expr_print(e->left.expr, fn, data, E_NOT); in expr_print()
1076 if (e->left.sym->name) in expr_print()
1077 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1081 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1084 if (e->left.sym->name) in expr_print()
1085 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1089 fn(data, e->right.sym, e->right.sym->name); 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()
1102 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1103 if (e->left.expr) { in expr_print()
1105 expr_print(e->left.expr, fn, data, E_LIST); in expr_print()
1110 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1112 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1118 sprintf(buf, "<unknown type %d>", e->type); in expr_print()
1123 if (expr_compare_type(prevtoken, e->type) > 0) in expr_print()
1132 void expr_fprint(struct expr *e, FILE *out) in expr_fprint() argument
1134 expr_print(e, expr_print_file_helper, out, E_NONE); in expr_fprint()
1167 void expr_gstr_print(struct expr *e, struct gstr *gs) in expr_gstr_print() argument
1169 expr_print(e, expr_print_gstr_helper, gs, E_NONE); in expr_gstr_print()