Lines Matching defs:e2
67 struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2)
69 return expr_lookup(type, e1, e2);
77 struct expr *expr_alloc_and(struct expr *e1, struct expr *e2)
80 return e2;
81 return e2 ? expr_alloc_two(E_AND, e1, e2) : e1;
84 struct expr *expr_alloc_or(struct expr *e1, struct expr *e2)
87 return e2;
88 return e2 ? expr_alloc_two(E_OR, e1, e2) : e1;
167 * For example, in the expression 'e1 && (e2 || e3) && (e4 || e5)', the
170 * - 'e1', 'e2 || e3', and 'e4 || e5', against each other
171 * - e2 against e3
174 * Parentheses are irrelevant within a single level. 'e1 && (e2 && e3)' and
175 * '(e1 && e2) && e3' are both a single level.
202 * Returns true if 'e1' and 'e2' are equal, after minor simplification. Two
207 bool expr_eq(struct expr *e1, struct expr *e2)
216 if (!e1 || !e2)
217 return expr_is_yes(e1) && expr_is_yes(e2);
219 if (e1->type != e2->type)
228 return e1->left.sym == e2->left.sym && e1->right.sym == e2->right.sym;
230 return e1->left.sym == e2->left.sym;
232 return expr_eq(e1->left.expr, e2->left.expr);
236 expr_eliminate_eq(&e1, &e2);
237 res = (e1->type == E_SYMBOL && e2->type == E_SYMBOL &&
238 e1->left.sym == e2->left.sym);
249 expr_fprint(e2, stdout);
311 * e1 || e2 -> ?
313 static struct expr *expr_join_or(struct expr *e1, struct expr *e2)
318 if (expr_eq(e1, e2))
322 if (e2->type != E_EQUAL && e2->type != E_UNEQUAL && e2->type != E_SYMBOL && e2->type != E_NOT)
331 if (e2->type == E_NOT) {
332 if (e2->left.expr->type != E_SYMBOL)
334 sym2 = e2->left.expr->left.sym;
336 sym2 = e2->left.sym;
342 if (e1->type == E_EQUAL && e2->type == E_EQUAL &&
343 ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) ||
344 (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) {
348 if (e1->type == E_EQUAL && e2->type == E_EQUAL &&
349 ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) ||
350 (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes))) {
354 if (e1->type == E_EQUAL && e2->type == E_EQUAL &&
355 ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) ||
356 (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod))) {
363 if ((e1->type == E_NOT && e1->left.expr->type == E_SYMBOL && e2->type == E_SYMBOL) ||
364 (e2->type == E_NOT && e2->left.expr->type == E_SYMBOL && e1->type == E_SYMBOL))
372 expr_fprint(e2, stdout);
378 static struct expr *expr_join_and(struct expr *e1, struct expr *e2)
383 if (expr_eq(e1, e2))
387 if (e2->type != E_EQUAL && e2->type != E_UNEQUAL && e2->type != E_SYMBOL && e2->type != E_NOT)
396 if (e2->type == E_NOT) {
397 if (e2->left.expr->type != E_SYMBOL)
399 sym2 = e2->left.expr->left.sym;
401 sym2 = e2->left.sym;
407 if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_yes) ||
408 (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_yes))
412 if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_no) ||
413 (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_no))
417 if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_mod) ||
418 (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_mod))
423 if (e1->type == E_EQUAL && e2->type == E_UNEQUAL) {
426 if ((e2->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST))
427 return sym2 != e2->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2)
430 if (e1->type == E_UNEQUAL && e2->type == E_EQUAL) {
432 sym2 = e2->right.sym;
437 if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL &&
438 ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) ||
439 (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes)))
443 if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL &&
444 ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) ||
445 (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes)))
449 if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL &&
450 ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) ||
451 (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod)))
455 if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_mod) ||
456 (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_mod) ||
457 (e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_yes) ||
458 (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_yes))
466 expr_fprint(e2, stdout);
819 struct expr *e1, *e2;
830 e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym);
832 e = expr_alloc_two(E_AND, e1, e2);
834 e = expr_alloc_two(E_OR, e1, e2);
840 e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym);
842 e = expr_alloc_two(E_OR, e1, e2);
844 e = expr_alloc_two(E_AND, e1, e2);