Lines Matching full:e
17 static struct expr *expr_eliminate_yn(struct expr *e);
21 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_symbol() local
22 e->type = E_SYMBOL; in expr_alloc_symbol()
23 e->left.sym = sym; in expr_alloc_symbol()
24 return e; in expr_alloc_symbol()
29 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_one() local
30 e->type = type; in expr_alloc_one()
31 e->left.expr = ce; in expr_alloc_one()
32 return e; in expr_alloc_one()
37 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_two() local
38 e->type = type; in expr_alloc_two()
39 e->left.expr = e1; in expr_alloc_two()
40 e->right.expr = e2; in expr_alloc_two()
41 return e; in expr_alloc_two()
46 struct expr *e = xcalloc(1, sizeof(*e)); in expr_alloc_comp() local
47 e->type = type; in expr_alloc_comp()
48 e->left.sym = s1; in expr_alloc_comp()
49 e->right.sym = s2; in expr_alloc_comp()
50 return e; in expr_alloc_comp()
69 struct expr *e; in expr_copy() local
74 e = xmalloc(sizeof(*org)); in expr_copy()
75 memcpy(e, org, sizeof(*org)); in expr_copy()
78 e->left = org->left; in expr_copy()
81 e->left.expr = expr_copy(org->left.expr); in expr_copy()
89 e->left.sym = org->left.sym; in expr_copy()
90 e->right.sym = org->right.sym; 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()
99 fprintf(stderr, "can't copy type %d\n", e->type); in expr_copy()
100 free(e); in expr_copy()
101 e = NULL; in expr_copy()
105 return e; in expr_copy()
108 void expr_free(struct expr *e) in expr_free() argument
110 if (!e) in expr_free()
113 switch (e->type) { 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()
132 fprintf(stderr, "how to free type %d?\n", e->type); in expr_free()
135 free(e); in expr_free()
310 static struct expr *expr_eliminate_yn(struct expr *e) in expr_eliminate_yn() argument
314 if (e) switch (e->type) { 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()
322 e->type = E_SYMBOL; in expr_eliminate_yn()
323 e->left.sym = &symbol_no; in expr_eliminate_yn()
324 e->right.expr = NULL; in expr_eliminate_yn()
325 return e; 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()
331 return e; 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()
338 e->type = E_SYMBOL; in expr_eliminate_yn()
339 e->left.sym = &symbol_no; in expr_eliminate_yn()
340 e->right.expr = NULL; in expr_eliminate_yn()
341 return e; 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()
347 return e; 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()
360 return e; 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()
364 e->type = E_SYMBOL; in expr_eliminate_yn()
365 e->left.sym = &symbol_yes; in expr_eliminate_yn()
366 e->right.expr = NULL; in expr_eliminate_yn()
367 return e; 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()
376 return e; 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()
380 e->type = E_SYMBOL; in expr_eliminate_yn()
381 e->left.sym = &symbol_yes; in expr_eliminate_yn()
382 e->right.expr = NULL; in expr_eliminate_yn()
383 return e; in expr_eliminate_yn()
390 return e; in expr_eliminate_yn()
396 struct expr *expr_trans_bool(struct expr *e) in expr_trans_bool() argument
398 if (!e) in expr_trans_bool()
400 switch (e->type) { 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()
409 if (e->left.sym->type == S_TRISTATE) { in expr_trans_bool()
410 if (e->right.sym == &symbol_no) { in expr_trans_bool()
411 e->type = E_SYMBOL; in expr_trans_bool()
412 e->right.sym = NULL; in expr_trans_bool()
419 return e; in expr_trans_bool()
648 * Rewrites 'e' in-place to remove ("join") duplicate and other redundant
658 struct expr *expr_eliminate_dups(struct expr *e) in expr_eliminate_dups() argument
661 if (!e) in expr_eliminate_dups()
662 return e; in expr_eliminate_dups()
667 switch (e->type) { in expr_eliminate_dups()
669 expr_eliminate_dups1(e->type, &e, &e); in expr_eliminate_dups()
676 e = expr_eliminate_yn(e); in expr_eliminate_dups()
679 return e; in expr_eliminate_dups()
688 struct expr *expr_transform(struct expr *e) in expr_transform() argument
692 if (!e) in expr_transform()
694 switch (e->type) { 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()
709 switch (e->type) { in expr_transform()
711 if (e->left.sym->type != S_BOOLEAN) in expr_transform()
713 if (e->right.sym == &symbol_no) { in expr_transform()
714 e->type = E_NOT; in expr_transform()
715 e->left.expr = expr_alloc_symbol(e->left.sym); in expr_transform()
716 e->right.sym = NULL; in expr_transform()
719 if (e->right.sym == &symbol_mod) { in expr_transform()
720 printf("boolean symbol %s tested for 'm'? test forced to 'n'\n", e->left.sym->name); in expr_transform()
721 e->type = E_SYMBOL; in expr_transform()
722 e->left.sym = &symbol_no; in expr_transform()
723 e->right.sym = NULL; in expr_transform()
726 if (e->right.sym == &symbol_yes) { in expr_transform()
727 e->type = E_SYMBOL; in expr_transform()
728 e->right.sym = NULL; in expr_transform()
733 if (e->left.sym->type != S_BOOLEAN) in expr_transform()
735 if (e->right.sym == &symbol_no) { in expr_transform()
736 e->type = E_SYMBOL; in expr_transform()
737 e->right.sym = NULL; in expr_transform()
740 if (e->right.sym == &symbol_mod) { in expr_transform()
741 printf("boolean symbol %s tested for 'm'? test forced to 'y'\n", e->left.sym->name); in expr_transform()
742 e->type = E_SYMBOL; in expr_transform()
743 e->left.sym = &symbol_yes; in expr_transform()
744 e->right.sym = NULL; in expr_transform()
747 if (e->right.sym == &symbol_yes) { in expr_transform()
748 e->type = E_NOT; in expr_transform()
749 e->left.expr = expr_alloc_symbol(e->left.sym); in expr_transform()
750 e->right.sym = NULL; 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()
760 free(e); in expr_transform()
761 e = tmp; in expr_transform()
762 e = expr_transform(e); in expr_transform()
767 tmp = e->left.expr; in expr_transform()
768 free(e); in expr_transform()
769 e = tmp; in expr_transform()
770 e->type = e->type == E_EQUAL ? E_UNEQUAL : E_EQUAL; in expr_transform()
775 tmp = e->left.expr; in expr_transform()
776 free(e); in expr_transform()
777 e = tmp; in expr_transform()
778 e->type = e->type == E_LEQ ? E_GTH : E_LTH; in expr_transform()
783 tmp = e->left.expr; in expr_transform()
784 free(e); in expr_transform()
785 e = tmp; in expr_transform()
786 e->type = e->type == E_LTH ? E_GEQ : E_LEQ; in expr_transform()
790 tmp = e->left.expr; in expr_transform()
791 e->type = E_AND; in expr_transform()
792 e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); in expr_transform()
795 e = expr_transform(e); in expr_transform()
799 tmp = e->left.expr; in expr_transform()
800 e->type = E_OR; in expr_transform()
801 e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); in expr_transform()
804 e = expr_transform(e); in expr_transform()
807 if (e->left.expr->left.sym == &symbol_yes) { in expr_transform()
809 tmp = e->left.expr; in expr_transform()
810 free(e); in expr_transform()
811 e = tmp; in expr_transform()
812 e->type = E_SYMBOL; in expr_transform()
813 e->left.sym = &symbol_no; in expr_transform()
816 if (e->left.expr->left.sym == &symbol_mod) { in expr_transform()
818 tmp = e->left.expr; in expr_transform()
819 free(e); in expr_transform()
820 e = tmp; in expr_transform()
821 e->type = E_SYMBOL; in expr_transform()
822 e->left.sym = &symbol_mod; in expr_transform()
825 if (e->left.expr->left.sym == &symbol_no) { in expr_transform()
827 tmp = e->left.expr; in expr_transform()
828 free(e); in expr_transform()
829 e = tmp; in expr_transform()
830 e->type = E_SYMBOL; in expr_transform()
831 e->left.sym = &symbol_yes; in expr_transform()
842 return e; in expr_transform()
904 * expression 'e'.
916 struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym) in expr_trans_compare() argument
920 if (!e) { in expr_trans_compare()
921 e = expr_alloc_symbol(sym); in expr_trans_compare()
923 e = expr_alloc_one(E_NOT, e); in expr_trans_compare()
924 return e; in expr_trans_compare()
926 switch (e->type) { 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()
931 e = expr_alloc_two(E_AND, e1, e2); in expr_trans_compare()
933 e = expr_alloc_two(E_OR, e1, e2); in expr_trans_compare()
935 e = expr_alloc_one(E_NOT, e); in expr_trans_compare()
936 return e; 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()
941 e = expr_alloc_two(E_OR, e1, e2); in expr_trans_compare()
943 e = expr_alloc_two(E_AND, e1, e2); in expr_trans_compare()
945 e = expr_alloc_one(E_NOT, e); in expr_trans_compare()
946 return e; in expr_trans_compare()
948 return expr_trans_compare(e->left.expr, type == E_EQUAL ? E_UNEQUAL : E_EQUAL, sym); in expr_trans_compare()
957 return expr_copy(e); in expr_trans_compare()
961 return expr_alloc_one(E_NOT, expr_copy(e)); in expr_trans_compare()
964 return expr_alloc_one(E_NOT, expr_copy(e)); in expr_trans_compare()
968 return expr_copy(e); in expr_trans_compare()
972 return expr_alloc_comp(type, e->left.sym, sym); in expr_trans_compare()
1024 tristate expr_calc_value(struct expr *e) in expr_calc_value() argument
1032 if (!e) in expr_calc_value()
1035 switch (e->type) { in expr_calc_value()
1037 sym_calc_value(e->left.sym); in expr_calc_value()
1038 return e->left.sym->curr.tri; 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()
1058 printf("expr_calc_value: %d?\n", e->type); in expr_calc_value()
1062 sym_calc_value(e->left.sym); in expr_calc_value()
1063 sym_calc_value(e->right.sym); in expr_calc_value()
1064 str1 = sym_get_string_value(e->left.sym); in expr_calc_value()
1065 str2 = sym_get_string_value(e->right.sym); in expr_calc_value()
1067 if (e->left.sym->type != S_STRING || e->right.sym->type != S_STRING) { in expr_calc_value()
1068 k1 = expr_parse_string(str1, e->left.sym->type, &lval); in expr_calc_value()
1069 k2 = expr_parse_string(str2, e->right.sym->type, &rval); in expr_calc_value()
1079 switch(e->type) { in expr_calc_value()
1093 printf("expr_calc_value: relation %d?\n", e->type); in expr_calc_value()
1132 void expr_print(struct expr *e, in expr_print() argument
1136 if (!e) { in expr_print()
1141 if (expr_compare_type(prevtoken, e->type) > 0) in expr_print()
1143 switch (e->type) { in expr_print()
1145 if (e->left.sym->name) in expr_print()
1146 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1152 expr_print(e->left.expr, fn, data, E_NOT); in expr_print()
1155 if (e->left.sym->name) in expr_print()
1156 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1160 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1164 if (e->left.sym->name) in expr_print()
1165 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1168 fn(data, NULL, e->type == E_LEQ ? "<=" : "<"); in expr_print()
1169 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1173 if (e->left.sym->name) in expr_print()
1174 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1177 fn(data, NULL, e->type == E_GEQ ? ">=" : ">"); in expr_print()
1178 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1181 if (e->left.sym->name) in expr_print()
1182 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()
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()
1199 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1200 if (e->left.expr) { in expr_print()
1202 expr_print(e->left.expr, fn, data, E_LIST); in expr_print()
1207 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1209 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1215 sprintf(buf, "<unknown type %d>", e->type); in expr_print()
1220 if (expr_compare_type(prevtoken, e->type) > 0) in expr_print()
1229 void expr_fprint(struct expr *e, FILE *out) in expr_fprint() argument
1231 expr_print(e, expr_print_file_helper, out, E_NONE); in expr_fprint()
1264 void expr_gstr_print(struct expr *e, struct gstr *gs) in expr_gstr_print() argument
1266 expr_print(e, expr_print_gstr_helper, gs, E_NONE); in expr_gstr_print()
1274 static void expr_print_revdep(struct expr *e, in expr_print_revdep() argument
1278 if (e->type == E_OR) { 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()
1281 } else if (expr_calc_value(e) == pr_type) { in expr_print_revdep()
1288 expr_print(e, fn, data, E_NONE); in expr_print_revdep()
1293 void expr_gstr_print_revdep(struct expr *e, struct gstr *gs, in expr_gstr_print_revdep() argument
1296 expr_print_revdep(e, expr_print_gstr_helper, gs, pr_type, &title); in expr_gstr_print_revdep()