Lines Matching refs:e2
16 static int expr_eq(struct expr *e1, struct expr *e2);
35 struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2) in expr_alloc_two() argument
40 e->right.expr = e2; in expr_alloc_two()
53 struct expr *expr_alloc_and(struct expr *e1, struct expr *e2) in expr_alloc_and() argument
56 return e2; in expr_alloc_and()
57 return e2 ? expr_alloc_two(E_AND, e1, e2) : e1; in expr_alloc_and()
60 struct expr *expr_alloc_or(struct expr *e1, struct expr *e2) in expr_alloc_or() argument
63 return e2; in expr_alloc_or()
64 return e2 ? expr_alloc_two(E_OR, e1, e2) : e1; in expr_alloc_or()
141 #define e2 (*ep2) macro
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()
160 if (e2->type == type) { 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()
168 if (e1->type == E_SYMBOL && e2->type == E_SYMBOL && in __expr_eliminate_eq()
169 e1->left.sym == e2->left.sym && in __expr_eliminate_eq()
172 if (!expr_eq(e1, e2)) in __expr_eliminate_eq()
178 expr_free(e1); expr_free(e2); in __expr_eliminate_eq()
182 e2 = expr_alloc_symbol(&symbol_no); in __expr_eliminate_eq()
186 e2 = expr_alloc_symbol(&symbol_yes); in __expr_eliminate_eq()
224 if (!e1 || !e2) in expr_eliminate_eq()
233 if (e1->type != e2->type) switch (e2->type) { in expr_eliminate_eq()
236 __expr_eliminate_eq(e2->type, ep1, ep2); in expr_eliminate_eq()
241 e2 = expr_eliminate_yn(e2); in expr_eliminate_eq()
245 #undef e2
253 static int expr_eq(struct expr *e1, struct expr *e2) in expr_eq() argument
257 if (e1->type != e2->type) in expr_eq()
266 return e1->left.sym == e2->left.sym && e1->right.sym == e2->right.sym; in expr_eq()
268 return e1->left.sym == e2->left.sym; in expr_eq()
270 return expr_eq(e1->left.expr, e2->left.expr); in expr_eq()
274 e2 = expr_copy(e2); in expr_eq()
276 expr_eliminate_eq(&e1, &e2); in expr_eq()
277 res = (e1->type == E_SYMBOL && e2->type == E_SYMBOL && in expr_eq()
278 e1->left.sym == e2->left.sym); in expr_eq()
280 expr_free(e2); in expr_eq()
292 expr_fprint(e2, stdout); in expr_eq()
425 static struct expr *expr_join_or(struct expr *e1, struct expr *e2) in expr_join_or() argument
430 if (expr_eq(e1, e2)) in expr_join_or()
434 if (e2->type != E_EQUAL && e2->type != E_UNEQUAL && e2->type != E_SYMBOL && e2->type != E_NOT) in expr_join_or()
443 if (e2->type == E_NOT) { 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()
448 sym2 = e2->left.sym; in expr_join_or()
454 if (e1->type == E_EQUAL && e2->type == E_EQUAL && in expr_join_or()
455 ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) || in expr_join_or()
456 (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) { in expr_join_or()
460 if (e1->type == E_EQUAL && e2->type == E_EQUAL && in expr_join_or()
461 ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) || in expr_join_or()
462 (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes))) { in expr_join_or()
466 if (e1->type == E_EQUAL && e2->type == E_EQUAL && in expr_join_or()
467 ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) || in expr_join_or()
468 (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod))) { 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()
483 expr_fprint(e2, stdout); in expr_join_or()
489 static struct expr *expr_join_and(struct expr *e1, struct expr *e2) in expr_join_and() argument
494 if (expr_eq(e1, e2)) in expr_join_and()
498 if (e2->type != E_EQUAL && e2->type != E_UNEQUAL && e2->type != E_SYMBOL && e2->type != E_NOT) in expr_join_and()
507 if (e2->type == E_NOT) { 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()
512 sym2 = e2->left.sym; in expr_join_and()
518 if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_yes) || in expr_join_and()
519 (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_yes)) in expr_join_and()
523 if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_no) || in expr_join_and()
524 (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_no)) in expr_join_and()
528 if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_mod) || in expr_join_and()
529 (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_mod)) in expr_join_and()
534 if (e1->type == E_EQUAL && e2->type == E_UNEQUAL) { in expr_join_and()
537 if ((e2->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST)) in expr_join_and()
538 return sym2 != e2->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2) in expr_join_and()
541 if (e1->type == E_UNEQUAL && e2->type == E_EQUAL) { in expr_join_and()
543 sym2 = e2->right.sym; in expr_join_and()
548 if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && in expr_join_and()
549 ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) || in expr_join_and()
550 (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes))) in expr_join_and()
554 if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && in expr_join_and()
555 ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) || in expr_join_and()
556 (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) in expr_join_and()
560 if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && in expr_join_and()
561 ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) || in expr_join_and()
562 (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod))) in expr_join_and()
566 if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_mod) || in expr_join_and()
567 (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_mod) || in expr_join_and()
568 (e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_yes) || in expr_join_and()
569 (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_yes)) in expr_join_and()
577 expr_fprint(e2, stdout); in expr_join_and()
593 #define e2 (*ep2) in expr_eliminate_dups1() macro
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()
603 if (e2->type == type) { 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()
611 if (e1 == e2) in expr_eliminate_dups1()
623 tmp = expr_join_or(e1, e2); in expr_eliminate_dups1()
625 expr_free(e1); expr_free(e2); in expr_eliminate_dups1()
627 e2 = tmp; in expr_eliminate_dups1()
632 tmp = expr_join_and(e1, e2); in expr_eliminate_dups1()
634 expr_free(e1); expr_free(e2); in expr_eliminate_dups1()
636 e2 = tmp; in expr_eliminate_dups1()
644 #undef e2 in expr_eliminate_dups1()
918 struct expr *e1, *e2; in expr_trans_compare() local
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()
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()