Lines Matching defs:ep1

96  * Walks the two expression trees given in 'ep1' and 'ep2'. Any node that does
101 static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct expr **ep2)
107 if ((*ep1)->type == type) {
108 l = (*ep1)->left.expr;
109 r = (*ep1)->right.expr;
112 *ep1 = expr_alloc_two(type, l, r);
118 __expr_eliminate_eq(type, ep1, &l);
119 __expr_eliminate_eq(type, ep1, &r);
124 /* *ep1 and *ep2 are leaves. Compare them. */
126 if ((*ep1)->type == E_SYMBOL && (*ep2)->type == E_SYMBOL &&
127 (*ep1)->left.sym == (*ep2)->left.sym &&
128 ((*ep1)->left.sym == &symbol_yes || (*ep1)->left.sym == &symbol_no))
130 if (!expr_eq(*ep1, *ep2))
133 /* *ep1 and *ep2 are equal leaves. Prepare them for elimination. */
138 *ep1 = expr_alloc_symbol(&symbol_no);
142 *ep1 = expr_alloc_symbol(&symbol_yes);
151 * Rewrites the expressions 'ep1' and 'ep2' to remove operands common to both.
154 * ep1: A && B -> ep1: y
157 * ep1: A || B -> ep1: n
160 * ep1: A && (B && FOO) -> ep1: FOO
163 * ep1: A && (B || C) -> ep1: y
179 void expr_eliminate_eq(struct expr **ep1, struct expr **ep2)
181 if (!*ep1 || !*ep2)
183 switch ((*ep1)->type) {
186 __expr_eliminate_eq((*ep1)->type, ep1, ep2);
190 if ((*ep1)->type != (*ep2)->type) switch ((*ep2)->type) {
193 __expr_eliminate_eq((*ep2)->type, ep1, ep2);
197 *ep1 = expr_eliminate_yn(*ep1);
475 * Walks the two expression trees given in 'ep1' and 'ep2'. Any node that does
479 static void expr_eliminate_dups1(enum expr_type type, struct expr **ep1, struct expr **ep2)
485 if ((*ep1)->type == type) {
486 l = (*ep1)->left.expr;
487 r = (*ep1)->right.expr;
490 *ep1 = expr_alloc_two(type, l, r);
496 expr_eliminate_dups1(type, ep1, &l);
497 expr_eliminate_dups1(type, ep1, &r);
502 /* *ep1 and *ep2 are leaves. Compare and process them. */
506 tmp = expr_join_or(*ep1, *ep2);
508 *ep1 = expr_alloc_symbol(&symbol_no);
514 tmp = expr_join_and(*ep1, *ep2);
516 *ep1 = expr_alloc_symbol(&symbol_yes);