Lines Matching refs:e

16 static struct expr *expr_eliminate_yn(struct expr *e);
20 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_symbol() local
21 e->type = E_SYMBOL; in expr_alloc_symbol()
22 e->left.sym = sym; in expr_alloc_symbol()
23 return e; in expr_alloc_symbol()
28 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_one() local
29 e->type = type; in expr_alloc_one()
30 e->left.expr = ce; in expr_alloc_one()
31 return e; in expr_alloc_one()
36 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_two() local
37 e->type = type; in expr_alloc_two()
38 e->left.expr = e1; in expr_alloc_two()
39 e->right.expr = e2; in expr_alloc_two()
40 return e; in expr_alloc_two()
45 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_comp() local
46 e->type = type; in expr_alloc_comp()
47 e->left.sym = s1; in expr_alloc_comp()
48 e->right.sym = s2; in expr_alloc_comp()
49 return e; in expr_alloc_comp()
68 struct expr *e; in expr_copy() local
73 e = xmalloc(sizeof(*org)); in expr_copy()
74 memcpy(e, org, sizeof(*org)); in expr_copy()
77 e->left = org->left; in expr_copy()
80 e->left.expr = expr_copy(org->left.expr); in expr_copy()
88 e->left.sym = org->left.sym; in expr_copy()
89 e->right.sym = org->right.sym; in expr_copy()
94 e->left.expr = expr_copy(org->left.expr); in expr_copy()
95 e->right.expr = expr_copy(org->right.expr); in expr_copy()
98 fprintf(stderr, "can't copy type %d\n", e->type); in expr_copy()
99 free(e); in expr_copy()
100 e = NULL; in expr_copy()
104 return e; in expr_copy()
107 void expr_free(struct expr *e) in expr_free() argument
109 if (!e) in expr_free()
112 switch (e->type) { in expr_free()
116 expr_free(e->left.expr); in expr_free()
127 expr_free(e->left.expr); in expr_free()
128 expr_free(e->right.expr); in expr_free()
131 fprintf(stderr, "how to free type %d?\n", e->type); in expr_free()
134 free(e); in expr_free()
316 static struct expr *expr_eliminate_yn(struct expr *e) in expr_eliminate_yn() argument
320 if (e) switch (e->type) { in expr_eliminate_yn()
322 e->left.expr = expr_eliminate_yn(e->left.expr); in expr_eliminate_yn()
323 e->right.expr = expr_eliminate_yn(e->right.expr); in expr_eliminate_yn()
324 if (e->left.expr->type == E_SYMBOL) { in expr_eliminate_yn()
325 if (e->left.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
326 expr_free(e->left.expr); in expr_eliminate_yn()
327 expr_free(e->right.expr); in expr_eliminate_yn()
328 e->type = E_SYMBOL; in expr_eliminate_yn()
329 e->left.sym = &symbol_no; in expr_eliminate_yn()
330 e->right.expr = NULL; in expr_eliminate_yn()
331 return e; in expr_eliminate_yn()
332 } else if (e->left.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
333 free(e->left.expr); in expr_eliminate_yn()
334 tmp = e->right.expr; in expr_eliminate_yn()
335 *e = *(e->right.expr); in expr_eliminate_yn()
337 return e; in expr_eliminate_yn()
340 if (e->right.expr->type == E_SYMBOL) { in expr_eliminate_yn()
341 if (e->right.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
342 expr_free(e->left.expr); in expr_eliminate_yn()
343 expr_free(e->right.expr); in expr_eliminate_yn()
344 e->type = E_SYMBOL; in expr_eliminate_yn()
345 e->left.sym = &symbol_no; in expr_eliminate_yn()
346 e->right.expr = NULL; in expr_eliminate_yn()
347 return e; in expr_eliminate_yn()
348 } else if (e->right.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
349 free(e->right.expr); in expr_eliminate_yn()
350 tmp = e->left.expr; in expr_eliminate_yn()
351 *e = *(e->left.expr); in expr_eliminate_yn()
353 return e; in expr_eliminate_yn()
358 e->left.expr = expr_eliminate_yn(e->left.expr); in expr_eliminate_yn()
359 e->right.expr = expr_eliminate_yn(e->right.expr); in expr_eliminate_yn()
360 if (e->left.expr->type == E_SYMBOL) { in expr_eliminate_yn()
361 if (e->left.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
362 free(e->left.expr); in expr_eliminate_yn()
363 tmp = e->right.expr; in expr_eliminate_yn()
364 *e = *(e->right.expr); in expr_eliminate_yn()
366 return e; in expr_eliminate_yn()
367 } else if (e->left.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
368 expr_free(e->left.expr); in expr_eliminate_yn()
369 expr_free(e->right.expr); in expr_eliminate_yn()
370 e->type = E_SYMBOL; in expr_eliminate_yn()
371 e->left.sym = &symbol_yes; in expr_eliminate_yn()
372 e->right.expr = NULL; in expr_eliminate_yn()
373 return e; in expr_eliminate_yn()
376 if (e->right.expr->type == E_SYMBOL) { in expr_eliminate_yn()
377 if (e->right.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
378 free(e->right.expr); in expr_eliminate_yn()
379 tmp = e->left.expr; in expr_eliminate_yn()
380 *e = *(e->left.expr); in expr_eliminate_yn()
382 return e; in expr_eliminate_yn()
383 } else if (e->right.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
384 expr_free(e->left.expr); in expr_eliminate_yn()
385 expr_free(e->right.expr); in expr_eliminate_yn()
386 e->type = E_SYMBOL; in expr_eliminate_yn()
387 e->left.sym = &symbol_yes; in expr_eliminate_yn()
388 e->right.expr = NULL; in expr_eliminate_yn()
389 return e; in expr_eliminate_yn()
396 return e; in expr_eliminate_yn()
635 struct expr *expr_eliminate_dups(struct expr *e) in expr_eliminate_dups() argument
638 if (!e) in expr_eliminate_dups()
639 return e; in expr_eliminate_dups()
644 switch (e->type) { in expr_eliminate_dups()
646 expr_eliminate_dups1(e->type, &e, &e); in expr_eliminate_dups()
653 e = expr_eliminate_yn(e); in expr_eliminate_dups()
656 return e; in expr_eliminate_dups()
665 struct expr *expr_transform(struct expr *e) in expr_transform() argument
669 if (!e) in expr_transform()
671 switch (e->type) { in expr_transform()
682 e->left.expr = expr_transform(e->left.expr); in expr_transform()
683 e->right.expr = expr_transform(e->right.expr); in expr_transform()
686 switch (e->type) { in expr_transform()
688 if (e->left.sym->type != S_BOOLEAN) in expr_transform()
690 if (e->right.sym == &symbol_no) { in expr_transform()
691 e->type = E_NOT; in expr_transform()
692 e->left.expr = expr_alloc_symbol(e->left.sym); in expr_transform()
693 e->right.sym = NULL; in expr_transform()
696 if (e->right.sym == &symbol_mod) { in expr_transform()
697 printf("boolean symbol %s tested for 'm'? test forced to 'n'\n", e->left.sym->name); in expr_transform()
698 e->type = E_SYMBOL; in expr_transform()
699 e->left.sym = &symbol_no; in expr_transform()
700 e->right.sym = NULL; in expr_transform()
703 if (e->right.sym == &symbol_yes) { in expr_transform()
704 e->type = E_SYMBOL; in expr_transform()
705 e->right.sym = NULL; in expr_transform()
710 if (e->left.sym->type != S_BOOLEAN) in expr_transform()
712 if (e->right.sym == &symbol_no) { in expr_transform()
713 e->type = E_SYMBOL; in expr_transform()
714 e->right.sym = NULL; in expr_transform()
717 if (e->right.sym == &symbol_mod) { in expr_transform()
718 printf("boolean symbol %s tested for 'm'? test forced to 'y'\n", e->left.sym->name); in expr_transform()
719 e->type = E_SYMBOL; in expr_transform()
720 e->left.sym = &symbol_yes; in expr_transform()
721 e->right.sym = NULL; in expr_transform()
724 if (e->right.sym == &symbol_yes) { in expr_transform()
725 e->type = E_NOT; in expr_transform()
726 e->left.expr = expr_alloc_symbol(e->left.sym); in expr_transform()
727 e->right.sym = NULL; in expr_transform()
732 switch (e->left.expr->type) { in expr_transform()
735 tmp = e->left.expr->left.expr; in expr_transform()
736 free(e->left.expr); in expr_transform()
737 free(e); in expr_transform()
738 e = tmp; in expr_transform()
739 e = expr_transform(e); in expr_transform()
744 tmp = e->left.expr; in expr_transform()
745 free(e); in expr_transform()
746 e = tmp; in expr_transform()
747 e->type = e->type == E_EQUAL ? E_UNEQUAL : E_EQUAL; 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->type == E_LEQ ? E_GTH : E_LTH; in expr_transform()
760 tmp = e->left.expr; in expr_transform()
761 free(e); in expr_transform()
762 e = tmp; in expr_transform()
763 e->type = e->type == E_LTH ? E_GEQ : E_LEQ; in expr_transform()
767 tmp = e->left.expr; in expr_transform()
768 e->type = E_AND; in expr_transform()
769 e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); in expr_transform()
772 e = expr_transform(e); in expr_transform()
776 tmp = e->left.expr; in expr_transform()
777 e->type = E_OR; in expr_transform()
778 e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); in expr_transform()
781 e = expr_transform(e); in expr_transform()
784 if (e->left.expr->left.sym == &symbol_yes) { in expr_transform()
786 tmp = e->left.expr; in expr_transform()
787 free(e); in expr_transform()
788 e = tmp; in expr_transform()
789 e->type = E_SYMBOL; in expr_transform()
790 e->left.sym = &symbol_no; in expr_transform()
793 if (e->left.expr->left.sym == &symbol_mod) { in expr_transform()
795 tmp = e->left.expr; in expr_transform()
796 free(e); in expr_transform()
797 e = tmp; in expr_transform()
798 e->type = E_SYMBOL; in expr_transform()
799 e->left.sym = &symbol_mod; in expr_transform()
802 if (e->left.expr->left.sym == &symbol_no) { in expr_transform()
804 tmp = e->left.expr; in expr_transform()
805 free(e); in expr_transform()
806 e = tmp; in expr_transform()
807 e->type = E_SYMBOL; in expr_transform()
808 e->left.sym = &symbol_yes; in expr_transform()
819 return e; in expr_transform()
893 struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym) in expr_trans_compare() argument
897 if (!e) { in expr_trans_compare()
898 e = expr_alloc_symbol(sym); in expr_trans_compare()
900 e = expr_alloc_one(E_NOT, e); in expr_trans_compare()
901 return e; in expr_trans_compare()
903 switch (e->type) { 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_AND, e1, e2); in expr_trans_compare()
910 e = expr_alloc_two(E_OR, 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 e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); in expr_trans_compare()
916 e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym); in expr_trans_compare()
918 e = expr_alloc_two(E_OR, e1, e2); in expr_trans_compare()
920 e = expr_alloc_two(E_AND, e1, e2); in expr_trans_compare()
922 e = expr_alloc_one(E_NOT, e); in expr_trans_compare()
923 return e; in expr_trans_compare()
925 return expr_trans_compare(e->left.expr, type == E_EQUAL ? E_UNEQUAL : E_EQUAL, sym); in expr_trans_compare()
934 return expr_copy(e); in expr_trans_compare()
938 return expr_alloc_one(E_NOT, expr_copy(e)); in expr_trans_compare()
941 return expr_alloc_one(E_NOT, expr_copy(e)); in expr_trans_compare()
945 return expr_copy(e); in expr_trans_compare()
949 return expr_alloc_comp(type, e->left.sym, sym); in expr_trans_compare()
1001 tristate expr_calc_value(struct expr *e) in expr_calc_value() argument
1009 if (!e) in expr_calc_value()
1012 switch (e->type) { in expr_calc_value()
1014 sym_calc_value(e->left.sym); in expr_calc_value()
1015 return e->left.sym->curr.tri; in expr_calc_value()
1017 val1 = expr_calc_value(e->left.expr); in expr_calc_value()
1018 val2 = expr_calc_value(e->right.expr); in expr_calc_value()
1021 val1 = expr_calc_value(e->left.expr); in expr_calc_value()
1022 val2 = expr_calc_value(e->right.expr); in expr_calc_value()
1025 val1 = expr_calc_value(e->left.expr); in expr_calc_value()
1035 printf("expr_calc_value: %d?\n", e->type); in expr_calc_value()
1039 sym_calc_value(e->left.sym); in expr_calc_value()
1040 sym_calc_value(e->right.sym); in expr_calc_value()
1041 str1 = sym_get_string_value(e->left.sym); in expr_calc_value()
1042 str2 = sym_get_string_value(e->right.sym); in expr_calc_value()
1044 if (e->left.sym->type != S_STRING || e->right.sym->type != S_STRING) { in expr_calc_value()
1045 k1 = expr_parse_string(str1, e->left.sym->type, &lval); in expr_calc_value()
1046 k2 = expr_parse_string(str2, e->right.sym->type, &rval); in expr_calc_value()
1056 switch(e->type) { in expr_calc_value()
1070 printf("expr_calc_value: relation %d?\n", e->type); in expr_calc_value()
1109 void expr_print(struct expr *e, in expr_print() argument
1113 if (!e) { in expr_print()
1118 if (expr_compare_type(prevtoken, e->type) > 0) in expr_print()
1120 switch (e->type) { in expr_print()
1122 if (e->left.sym->name) in expr_print()
1123 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1129 expr_print(e->left.expr, fn, data, E_NOT); in expr_print()
1132 if (e->left.sym->name) in expr_print()
1133 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1137 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1141 if (e->left.sym->name) in expr_print()
1142 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1145 fn(data, NULL, e->type == E_LEQ ? "<=" : "<"); in expr_print()
1146 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1150 if (e->left.sym->name) in expr_print()
1151 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1154 fn(data, NULL, e->type == E_GEQ ? ">=" : ">"); in expr_print()
1155 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1158 if (e->left.sym->name) in expr_print()
1159 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1163 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1166 expr_print(e->left.expr, fn, data, E_OR); in expr_print()
1168 expr_print(e->right.expr, fn, data, E_OR); in expr_print()
1171 expr_print(e->left.expr, fn, data, E_AND); in expr_print()
1173 expr_print(e->right.expr, fn, data, E_AND); in expr_print()
1176 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1177 if (e->left.expr) { in expr_print()
1179 expr_print(e->left.expr, fn, data, E_LIST); in expr_print()
1184 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1186 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1192 sprintf(buf, "<unknown type %d>", e->type); in expr_print()
1197 if (expr_compare_type(prevtoken, e->type) > 0) in expr_print()
1206 void expr_fprint(struct expr *e, FILE *out) in expr_fprint() argument
1208 expr_print(e, expr_print_file_helper, out, E_NONE); in expr_fprint()
1241 void expr_gstr_print(struct expr *e, struct gstr *gs) in expr_gstr_print() argument
1243 expr_print(e, expr_print_gstr_helper, gs, E_NONE); in expr_gstr_print()
1251 static void expr_print_revdep(struct expr *e, in expr_print_revdep() argument
1255 if (e->type == E_OR) { in expr_print_revdep()
1256 expr_print_revdep(e->left.expr, fn, data, pr_type, title); in expr_print_revdep()
1257 expr_print_revdep(e->right.expr, fn, data, pr_type, title); in expr_print_revdep()
1258 } else if (expr_calc_value(e) == pr_type) { in expr_print_revdep()
1265 expr_print(e, fn, data, E_NONE); in expr_print_revdep()
1270 void expr_gstr_print_revdep(struct expr *e, struct gstr *gs, in expr_gstr_print_revdep() argument
1273 expr_print_revdep(e, expr_print_gstr_helper, gs, pr_type, &title); in expr_gstr_print_revdep()