Lines Matching full:e

21 static struct expr *expr_eliminate_yn(struct expr *e);
35 struct expr *e; in expr_lookup() local
40 hash_for_each_possible(expr_hashtable, e, node, hash) { in expr_lookup()
41 if (e->type == type && e->left._initdata == l && in expr_lookup()
42 e->right._initdata == r) in expr_lookup()
43 return e; in expr_lookup()
46 e = xmalloc(sizeof(*e)); in expr_lookup()
47 e->type = type; in expr_lookup()
48 e->left._initdata = l; in expr_lookup()
49 e->right._initdata = r; in expr_lookup()
50 e->val_is_valid = false; in expr_lookup()
52 hash_add(expr_hashtable, &e->node, hash); in expr_lookup()
54 return e; in expr_lookup()
267 static struct expr *expr_eliminate_yn(struct expr *e) in expr_eliminate_yn() argument
271 if (e) switch (e->type) { in expr_eliminate_yn()
273 l = expr_eliminate_yn(e->left.expr); in expr_eliminate_yn()
274 r = expr_eliminate_yn(e->right.expr); in expr_eliminate_yn()
289 l = expr_eliminate_yn(e->left.expr); in expr_eliminate_yn()
290 r = expr_eliminate_yn(e->right.expr); in expr_eliminate_yn()
307 return e; in expr_eliminate_yn()
527 * Rewrites 'e' in-place to remove ("join") duplicate and other redundant
537 struct expr *expr_eliminate_dups(struct expr *e) in expr_eliminate_dups() argument
540 if (!e) in expr_eliminate_dups()
541 return e; in expr_eliminate_dups()
548 switch (e->type) { in expr_eliminate_dups()
550 l = expr_eliminate_dups(e->left.expr); in expr_eliminate_dups()
551 r = expr_eliminate_dups(e->right.expr); in expr_eliminate_dups()
552 expr_eliminate_dups1(e->type, &l, &r); in expr_eliminate_dups()
553 e = expr_alloc_two(e->type, l, r); in expr_eliminate_dups()
557 e = expr_eliminate_yn(e); in expr_eliminate_dups()
560 return e; in expr_eliminate_dups()
593 struct expr *expr_transform(struct expr *e) in expr_transform() argument
595 if (!e) in expr_transform()
597 switch (e->type) { in expr_transform()
607 e = expr_alloc_two(e->type, in expr_transform()
608 expr_transform(e->left.expr), in expr_transform()
609 expr_transform(e->right.expr)); in expr_transform()
612 switch (e->type) { in expr_transform()
614 if (e->left.sym->type != S_BOOLEAN) in expr_transform()
616 if (e->right.sym == &symbol_no) { in expr_transform()
618 e = expr_alloc_one(E_NOT, expr_alloc_symbol(e->left.sym)); in expr_transform()
621 if (e->right.sym == &symbol_mod) { in expr_transform()
623 printf("boolean symbol %s tested for 'm'? test forced to 'n'\n", e->left.sym->name); in expr_transform()
624 e = expr_alloc_symbol(&symbol_no); in expr_transform()
627 if (e->right.sym == &symbol_yes) { in expr_transform()
629 e = expr_alloc_symbol(e->left.sym); in expr_transform()
634 if (e->left.sym->type != S_BOOLEAN) in expr_transform()
636 if (e->right.sym == &symbol_no) { in expr_transform()
638 e = expr_alloc_symbol(e->left.sym); in expr_transform()
641 if (e->right.sym == &symbol_mod) { in expr_transform()
643 printf("boolean symbol %s tested for 'm'? test forced to 'y'\n", e->left.sym->name); in expr_transform()
644 e = expr_alloc_symbol(&symbol_yes); in expr_transform()
647 if (e->right.sym == &symbol_yes) { in expr_transform()
649 e = expr_alloc_one(E_NOT, e->left.expr); in expr_transform()
654 switch (e->left.expr->type) { in expr_transform()
657 e = e->left.expr->left.expr; in expr_transform()
662 e = expr_alloc_comp(e->left.expr->type == E_EQUAL ? E_UNEQUAL : E_EQUAL, in expr_transform()
663 e->left.expr->left.sym, in expr_transform()
664 e->left.expr->right.sym); in expr_transform()
669 e = expr_alloc_comp(e->left.expr->type == E_LEQ ? E_GTH : E_LTH, in expr_transform()
670 e->left.expr->left.sym, in expr_transform()
671 e->left.expr->right.sym); in expr_transform()
676 e = expr_alloc_comp(e->left.expr->type == E_LTH ? E_GEQ : E_LEQ, in expr_transform()
677 e->left.expr->left.sym, in expr_transform()
678 e->left.expr->right.sym); in expr_transform()
682 e = expr_alloc_and(expr_alloc_one(E_NOT, e->left.expr->left.expr), in expr_transform()
683 expr_alloc_one(E_NOT, e->left.expr->right.expr)); in expr_transform()
684 e = expr_transform(e); in expr_transform()
688 e = expr_alloc_or(expr_alloc_one(E_NOT, e->left.expr->left.expr), in expr_transform()
689 expr_alloc_one(E_NOT, e->left.expr->right.expr)); in expr_transform()
690 e = expr_transform(e); in expr_transform()
693 if (e->left.expr->left.sym == &symbol_yes) in expr_transform()
695 e = expr_alloc_symbol(&symbol_no); in expr_transform()
696 else if (e->left.expr->left.sym == &symbol_mod) in expr_transform()
698 e = expr_alloc_symbol(&symbol_mod); in expr_transform()
699 else if (e->left.expr->left.sym == &symbol_no) in expr_transform()
701 e = expr_alloc_symbol(&symbol_yes); in expr_transform()
710 return e; in expr_transform()
772 * expression 'e'.
784 struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym) in expr_trans_compare() argument
788 if (!e) { in expr_trans_compare()
789 e = expr_alloc_symbol(sym); in expr_trans_compare()
791 e = expr_alloc_one(E_NOT, e); in expr_trans_compare()
792 return e; in expr_trans_compare()
794 switch (e->type) { in expr_trans_compare()
796 e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); in expr_trans_compare()
797 e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym); in expr_trans_compare()
799 e = expr_alloc_two(E_AND, e1, e2); in expr_trans_compare()
801 e = expr_alloc_two(E_OR, e1, e2); in expr_trans_compare()
803 e = expr_alloc_one(E_NOT, e); in expr_trans_compare()
804 return e; in expr_trans_compare()
806 e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); in expr_trans_compare()
807 e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym); in expr_trans_compare()
809 e = expr_alloc_two(E_OR, e1, e2); in expr_trans_compare()
811 e = expr_alloc_two(E_AND, e1, e2); in expr_trans_compare()
813 e = expr_alloc_one(E_NOT, e); in expr_trans_compare()
814 return e; in expr_trans_compare()
816 return expr_trans_compare(e->left.expr, type == E_EQUAL ? E_UNEQUAL : E_EQUAL, sym); in expr_trans_compare()
825 return e; in expr_trans_compare()
829 return expr_alloc_one(E_NOT, e); in expr_trans_compare()
832 return expr_alloc_one(E_NOT, e); in expr_trans_compare()
836 return e; in expr_trans_compare()
840 return expr_alloc_comp(type, e->left.sym, sym); in expr_trans_compare()
891 static tristate __expr_calc_value(struct expr *e) in __expr_calc_value() argument
899 switch (e->type) { in __expr_calc_value()
901 sym_calc_value(e->left.sym); in __expr_calc_value()
902 return e->left.sym->curr.tri; in __expr_calc_value()
904 val1 = expr_calc_value(e->left.expr); in __expr_calc_value()
905 val2 = expr_calc_value(e->right.expr); in __expr_calc_value()
908 val1 = expr_calc_value(e->left.expr); in __expr_calc_value()
909 val2 = expr_calc_value(e->right.expr); in __expr_calc_value()
912 val1 = expr_calc_value(e->left.expr); in __expr_calc_value()
922 printf("expr_calc_value: %d?\n", e->type); in __expr_calc_value()
926 sym_calc_value(e->left.sym); in __expr_calc_value()
927 sym_calc_value(e->right.sym); in __expr_calc_value()
928 str1 = sym_get_string_value(e->left.sym); in __expr_calc_value()
929 str2 = sym_get_string_value(e->right.sym); in __expr_calc_value()
931 if (e->left.sym->type != S_STRING || e->right.sym->type != S_STRING) { in __expr_calc_value()
932 k1 = expr_parse_string(str1, e->left.sym->type, &lval); in __expr_calc_value()
933 k2 = expr_parse_string(str2, e->right.sym->type, &rval); in __expr_calc_value()
943 switch(e->type) { in __expr_calc_value()
957 printf("expr_calc_value: relation %d?\n", e->type); in __expr_calc_value()
964 * @e: expression
967 tristate expr_calc_value(struct expr *e) in expr_calc_value() argument
969 if (!e) in expr_calc_value()
972 if (!e->val_is_valid) { in expr_calc_value()
973 e->val = __expr_calc_value(e); in expr_calc_value()
974 e->val_is_valid = true; in expr_calc_value()
977 return e->val; in expr_calc_value()
985 struct expr *e; in expr_invalidate_all() local
987 hash_for_each(expr_hashtable, e, node) in expr_invalidate_all()
988 e->val_is_valid = false; in expr_invalidate_all()
1022 void expr_print(const struct expr *e, in expr_print() argument
1026 if (!e) { in expr_print()
1031 if (expr_compare_type(prevtoken, e->type) > 0) in expr_print()
1033 switch (e->type) { in expr_print()
1035 if (e->left.sym->name) in expr_print()
1036 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1042 expr_print(e->left.expr, fn, data, E_NOT); in expr_print()
1045 if (e->left.sym->name) in expr_print()
1046 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1050 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1054 if (e->left.sym->name) in expr_print()
1055 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1058 fn(data, NULL, e->type == E_LEQ ? "<=" : "<"); in expr_print()
1059 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1063 if (e->left.sym->name) in expr_print()
1064 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1067 fn(data, NULL, e->type == E_GEQ ? ">=" : ">"); in expr_print()
1068 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1071 if (e->left.sym->name) in expr_print()
1072 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1076 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1079 expr_print(e->left.expr, fn, data, E_OR); in expr_print()
1081 expr_print(e->right.expr, fn, data, E_OR); in expr_print()
1084 expr_print(e->left.expr, fn, data, E_AND); in expr_print()
1086 expr_print(e->right.expr, fn, data, E_AND); in expr_print()
1090 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1092 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1098 sprintf(buf, "<unknown type %d>", e->type); in expr_print()
1103 if (expr_compare_type(prevtoken, e->type) > 0) in expr_print()
1112 void expr_fprint(struct expr *e, FILE *out) in expr_fprint() argument
1114 expr_print(e, expr_print_file_helper, out, E_NONE); in expr_fprint()
1147 void expr_gstr_print(const struct expr *e, struct gstr *gs) in expr_gstr_print() argument
1149 expr_print(e, expr_print_gstr_helper, gs, E_NONE); in expr_gstr_print()
1157 static void expr_print_revdep(struct expr *e, in expr_print_revdep() argument
1161 if (e->type == E_OR) { in expr_print_revdep()
1162 expr_print_revdep(e->left.expr, fn, data, pr_type, title); in expr_print_revdep()
1163 expr_print_revdep(e->right.expr, fn, data, pr_type, title); in expr_print_revdep()
1164 } else if (expr_calc_value(e) == pr_type) { in expr_print_revdep()
1171 expr_print(e, fn, data, E_NONE); in expr_print_revdep()
1176 void expr_gstr_print_revdep(struct expr *e, struct gstr *gs, in expr_gstr_print_revdep() argument
1179 expr_print_revdep(e, expr_print_gstr_helper, gs, pr_type, &title); in expr_gstr_print_revdep()