Lines Matching +full:left +full:-

2  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
20 e->type = E_SYMBOL; in expr_alloc_symbol()
21 e->left.sym = sym; in expr_alloc_symbol()
28 e->type = type; in expr_alloc_one()
29 e->left.expr = ce; in expr_alloc_one()
36 e->type = type; in expr_alloc_two()
37 e->left.expr = e1; in expr_alloc_two()
38 e->right.expr = e2; in expr_alloc_two()
45 e->type = type; in expr_alloc_comp()
46 e->left.sym = s1; in expr_alloc_comp()
47 e->right.sym = s2; in expr_alloc_comp()
74 switch (org->type) { in expr_copy()
76 e->left = org->left; in expr_copy()
79 e->left.expr = expr_copy(org->left.expr); in expr_copy()
87 e->left.sym = org->left.sym; in expr_copy()
88 e->right.sym = org->right.sym; in expr_copy()
93 e->left.expr = expr_copy(org->left.expr); in expr_copy()
94 e->right.expr = expr_copy(org->right.expr); in expr_copy()
97 fprintf(stderr, "can't copy type %d\n", e->type); in expr_copy()
111 switch (e->type) { in expr_free()
115 expr_free(e->left.expr); in expr_free()
126 expr_free(e->left.expr); in expr_free()
127 expr_free(e->right.expr); in expr_free()
130 fprintf(stderr, "how to free type %d?\n", e->type); in expr_free()
153 if (e1->type == type) { in __expr_eliminate_eq()
154 __expr_eliminate_eq(type, &e1->left.expr, &e2); in __expr_eliminate_eq()
155 __expr_eliminate_eq(type, &e1->right.expr, &e2); in __expr_eliminate_eq()
158 if (e2->type == type) { in __expr_eliminate_eq()
159 __expr_eliminate_eq(type, &e1, &e2->left.expr); in __expr_eliminate_eq()
160 __expr_eliminate_eq(type, &e1, &e2->right.expr); in __expr_eliminate_eq()
166 if (e1->type == E_SYMBOL && e2->type == E_SYMBOL && in __expr_eliminate_eq()
167 e1->left.sym == e2->left.sym && in __expr_eliminate_eq()
168 (e1->left.sym == &symbol_yes || e1->left.sym == &symbol_no)) in __expr_eliminate_eq()
195 * ep1: A && B -> ep1: y
196 * ep2: A && B && C -> ep2: C
198 * ep1: A || B -> ep1: n
199 * ep2: A || B || C -> ep2: C
201 * ep1: A && (B && FOO) -> ep1: FOO
202 * ep2: (BAR && B) && A -> ep2: BAR
204 * ep1: A && (B || C) -> ep1: y
205 * ep2: (C || B) && A -> ep2: y
211 * - 'e1', 'e2 || e3', and 'e4 || e5', against each other
212 * - e2 against e3
213 * - e4 against e5
224 switch (e1->type) { in expr_eliminate_eq()
227 __expr_eliminate_eq(e1->type, ep1, ep2); in expr_eliminate_eq()
231 if (e1->type != e2->type) switch (e2->type) { in expr_eliminate_eq()
234 __expr_eliminate_eq(e2->type, ep1, ep2); in expr_eliminate_eq()
255 if (e1->type != e2->type) in expr_eq()
257 switch (e1->type) { in expr_eq()
264 return e1->left.sym == e2->left.sym && e1->right.sym == e2->right.sym; in expr_eq()
266 return e1->left.sym == e2->left.sym; in expr_eq()
268 return expr_eq(e1->left.expr, e2->left.expr); in expr_eq()
275 res = (e1->type == E_SYMBOL && e2->type == E_SYMBOL && in expr_eq()
276 e1->left.sym == e2->left.sym); in expr_eq()
298 * Recursively performs the following simplifications in-place (as well as the
301 * expr && n -> n
302 * expr && y -> expr
303 * expr || n -> expr
304 * expr || y -> y
312 if (e) switch (e->type) { in expr_eliminate_yn()
314 e->left.expr = expr_eliminate_yn(e->left.expr); in expr_eliminate_yn()
315 e->right.expr = expr_eliminate_yn(e->right.expr); in expr_eliminate_yn()
316 if (e->left.expr->type == E_SYMBOL) { in expr_eliminate_yn()
317 if (e->left.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
318 expr_free(e->left.expr); in expr_eliminate_yn()
319 expr_free(e->right.expr); in expr_eliminate_yn()
320 e->type = E_SYMBOL; in expr_eliminate_yn()
321 e->left.sym = &symbol_no; in expr_eliminate_yn()
322 e->right.expr = NULL; in expr_eliminate_yn()
324 } else if (e->left.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
325 free(e->left.expr); in expr_eliminate_yn()
326 tmp = e->right.expr; in expr_eliminate_yn()
327 *e = *(e->right.expr); in expr_eliminate_yn()
332 if (e->right.expr->type == E_SYMBOL) { in expr_eliminate_yn()
333 if (e->right.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
334 expr_free(e->left.expr); in expr_eliminate_yn()
335 expr_free(e->right.expr); in expr_eliminate_yn()
336 e->type = E_SYMBOL; in expr_eliminate_yn()
337 e->left.sym = &symbol_no; in expr_eliminate_yn()
338 e->right.expr = NULL; in expr_eliminate_yn()
340 } else if (e->right.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
341 free(e->right.expr); in expr_eliminate_yn()
342 tmp = e->left.expr; in expr_eliminate_yn()
343 *e = *(e->left.expr); in expr_eliminate_yn()
350 e->left.expr = expr_eliminate_yn(e->left.expr); in expr_eliminate_yn()
351 e->right.expr = expr_eliminate_yn(e->right.expr); in expr_eliminate_yn()
352 if (e->left.expr->type == E_SYMBOL) { in expr_eliminate_yn()
353 if (e->left.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
354 free(e->left.expr); in expr_eliminate_yn()
355 tmp = e->right.expr; in expr_eliminate_yn()
356 *e = *(e->right.expr); in expr_eliminate_yn()
359 } else if (e->left.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
360 expr_free(e->left.expr); in expr_eliminate_yn()
361 expr_free(e->right.expr); in expr_eliminate_yn()
362 e->type = E_SYMBOL; in expr_eliminate_yn()
363 e->left.sym = &symbol_yes; in expr_eliminate_yn()
364 e->right.expr = NULL; in expr_eliminate_yn()
368 if (e->right.expr->type == E_SYMBOL) { in expr_eliminate_yn()
369 if (e->right.expr->left.sym == &symbol_no) { in expr_eliminate_yn()
370 free(e->right.expr); in expr_eliminate_yn()
371 tmp = e->left.expr; in expr_eliminate_yn()
372 *e = *(e->left.expr); in expr_eliminate_yn()
375 } else if (e->right.expr->left.sym == &symbol_yes) { in expr_eliminate_yn()
376 expr_free(e->left.expr); in expr_eliminate_yn()
377 expr_free(e->right.expr); in expr_eliminate_yn()
378 e->type = E_SYMBOL; in expr_eliminate_yn()
379 e->left.sym = &symbol_yes; in expr_eliminate_yn()
380 e->right.expr = NULL; in expr_eliminate_yn()
398 switch (e->type) { in expr_trans_bool()
402 e->left.expr = expr_trans_bool(e->left.expr); in expr_trans_bool()
403 e->right.expr = expr_trans_bool(e->right.expr); in expr_trans_bool()
406 // FOO!=n -> FOO in expr_trans_bool()
407 if (e->left.sym->type == S_TRISTATE) { in expr_trans_bool()
408 if (e->right.sym == &symbol_no) { in expr_trans_bool()
409 e->type = E_SYMBOL; in expr_trans_bool()
410 e->right.sym = NULL; in expr_trans_bool()
421 * e1 || e2 -> ?
430 if (e1->type != E_EQUAL && e1->type != E_UNEQUAL && e1->type != E_SYMBOL && e1->type != E_NOT) in expr_join_or()
432 if (e2->type != E_EQUAL && e2->type != E_UNEQUAL && e2->type != E_SYMBOL && e2->type != E_NOT) in expr_join_or()
434 if (e1->type == E_NOT) { in expr_join_or()
435 tmp = e1->left.expr; in expr_join_or()
436 if (tmp->type != E_EQUAL && tmp->type != E_UNEQUAL && tmp->type != E_SYMBOL) in expr_join_or()
438 sym1 = tmp->left.sym; in expr_join_or()
440 sym1 = e1->left.sym; in expr_join_or()
441 if (e2->type == E_NOT) { in expr_join_or()
442 if (e2->left.expr->type != E_SYMBOL) in expr_join_or()
444 sym2 = e2->left.expr->left.sym; in expr_join_or()
446 sym2 = e2->left.sym; in expr_join_or()
449 if (sym1->type != S_BOOLEAN && sym1->type != S_TRISTATE) in expr_join_or()
451 if (sym1->type == S_TRISTATE) { in expr_join_or()
452 if (e1->type == E_EQUAL && e2->type == E_EQUAL && in expr_join_or()
453 ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) || in expr_join_or()
454 (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) { in expr_join_or()
455 // (a='y') || (a='m') -> (a!='n') in expr_join_or()
458 if (e1->type == E_EQUAL && e2->type == E_EQUAL && in expr_join_or()
459 ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) || in expr_join_or()
460 (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes))) { in expr_join_or()
461 // (a='y') || (a='n') -> (a!='m') in expr_join_or()
464 if (e1->type == E_EQUAL && e2->type == E_EQUAL && in expr_join_or()
465 ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) || in expr_join_or()
466 (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod))) { in expr_join_or()
467 // (a='m') || (a='n') -> (a!='y') in expr_join_or()
471 if (sym1->type == S_BOOLEAN && sym1 == sym2) { in expr_join_or()
472 if ((e1->type == E_NOT && e1->left.expr->type == E_SYMBOL && e2->type == E_SYMBOL) || in expr_join_or()
473 (e2->type == E_NOT && e2->left.expr->type == E_SYMBOL && e1->type == E_SYMBOL)) in expr_join_or()
494 if (e1->type != E_EQUAL && e1->type != E_UNEQUAL && e1->type != E_SYMBOL && e1->type != E_NOT) in expr_join_and()
496 if (e2->type != E_EQUAL && e2->type != E_UNEQUAL && e2->type != E_SYMBOL && e2->type != E_NOT) in expr_join_and()
498 if (e1->type == E_NOT) { in expr_join_and()
499 tmp = e1->left.expr; in expr_join_and()
500 if (tmp->type != E_EQUAL && tmp->type != E_UNEQUAL && tmp->type != E_SYMBOL) in expr_join_and()
502 sym1 = tmp->left.sym; in expr_join_and()
504 sym1 = e1->left.sym; in expr_join_and()
505 if (e2->type == E_NOT) { in expr_join_and()
506 if (e2->left.expr->type != E_SYMBOL) in expr_join_and()
508 sym2 = e2->left.expr->left.sym; in expr_join_and()
510 sym2 = e2->left.sym; in expr_join_and()
513 if (sym1->type != S_BOOLEAN && sym1->type != S_TRISTATE) in expr_join_and()
516 if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_yes) || in expr_join_and()
517 (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_yes)) in expr_join_and()
518 // (a) && (a='y') -> (a='y') in expr_join_and()
521 if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_no) || in expr_join_and()
522 (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_no)) in expr_join_and()
523 // (a) && (a!='n') -> (a) in expr_join_and()
526 if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_mod) || in expr_join_and()
527 (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_mod)) in expr_join_and()
528 // (a) && (a!='m') -> (a='y') in expr_join_and()
531 if (sym1->type == S_TRISTATE) { in expr_join_and()
532 if (e1->type == E_EQUAL && e2->type == E_UNEQUAL) { in expr_join_and()
533 // (a='b') && (a!='c') -> 'b'='c' ? 'n' : a='b' in expr_join_and()
534 sym2 = e1->right.sym; in expr_join_and()
535 if ((e2->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST)) in expr_join_and()
536 return sym2 != e2->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2) in expr_join_and()
539 if (e1->type == E_UNEQUAL && e2->type == E_EQUAL) { in expr_join_and()
540 // (a='b') && (a!='c') -> 'b'='c' ? 'n' : a='b' in expr_join_and()
541 sym2 = e2->right.sym; in expr_join_and()
542 if ((e1->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST)) in expr_join_and()
543 return sym2 != e1->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2) in expr_join_and()
546 if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && in expr_join_and()
547 ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) || in expr_join_and()
548 (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes))) in expr_join_and()
549 // (a!='y') && (a!='n') -> (a='m') in expr_join_and()
552 if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && in expr_join_and()
553 ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) || in expr_join_and()
554 (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) in expr_join_and()
555 // (a!='y') && (a!='m') -> (a='n') in expr_join_and()
558 if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && in expr_join_and()
559 ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) || in expr_join_and()
560 (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod))) in expr_join_and()
561 // (a!='m') && (a!='n') -> (a='m') in expr_join_and()
564 if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_mod) || in expr_join_and()
565 (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_mod) || in expr_join_and()
566 (e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_yes) || in expr_join_and()
567 (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_yes)) in expr_join_and()
596 if (e1->type == type) { in expr_eliminate_dups1()
597 expr_eliminate_dups1(type, &e1->left.expr, &e2); in expr_eliminate_dups1()
598 expr_eliminate_dups1(type, &e1->right.expr, &e2); in expr_eliminate_dups1()
601 if (e2->type == type) { in expr_eliminate_dups1()
602 expr_eliminate_dups1(type, &e1, &e2->left.expr); in expr_eliminate_dups1()
603 expr_eliminate_dups1(type, &e1, &e2->right.expr); in expr_eliminate_dups1()
612 switch (e1->type) { in expr_eliminate_dups1()
614 expr_eliminate_dups1(e1->type, &e1, &e1); in expr_eliminate_dups1()
646 * Rewrites 'e' in-place to remove ("join") duplicate and other redundant
651 * A || B || A -> A || B
652 * A && B && A=y -> A=y && B
665 switch (e->type) { in expr_eliminate_dups()
667 expr_eliminate_dups1(e->type, &e, &e); in expr_eliminate_dups()
692 switch (e->type) { in expr_transform()
703 e->left.expr = expr_transform(e->left.expr); in expr_transform()
704 e->right.expr = expr_transform(e->right.expr); in expr_transform()
707 switch (e->type) { in expr_transform()
709 if (e->left.sym->type != S_BOOLEAN) in expr_transform()
711 if (e->right.sym == &symbol_no) { in expr_transform()
712 e->type = E_NOT; in expr_transform()
713 e->left.expr = expr_alloc_symbol(e->left.sym); in expr_transform()
714 e->right.sym = NULL; in expr_transform()
717 if (e->right.sym == &symbol_mod) { in expr_transform()
718 printf("boolean symbol %s tested for 'm'? test forced to 'n'\n", e->left.sym->name); in expr_transform()
719 e->type = E_SYMBOL; in expr_transform()
720 e->left.sym = &symbol_no; in expr_transform()
721 e->right.sym = NULL; in expr_transform()
724 if (e->right.sym == &symbol_yes) { in expr_transform()
725 e->type = E_SYMBOL; in expr_transform()
726 e->right.sym = NULL; in expr_transform()
731 if (e->left.sym->type != S_BOOLEAN) in expr_transform()
733 if (e->right.sym == &symbol_no) { in expr_transform()
734 e->type = E_SYMBOL; in expr_transform()
735 e->right.sym = NULL; in expr_transform()
738 if (e->right.sym == &symbol_mod) { in expr_transform()
739 printf("boolean symbol %s tested for 'm'? test forced to 'y'\n", e->left.sym->name); in expr_transform()
740 e->type = E_SYMBOL; in expr_transform()
741 e->left.sym = &symbol_yes; in expr_transform()
742 e->right.sym = NULL; in expr_transform()
745 if (e->right.sym == &symbol_yes) { in expr_transform()
746 e->type = E_NOT; in expr_transform()
747 e->left.expr = expr_alloc_symbol(e->left.sym); in expr_transform()
748 e->right.sym = NULL; in expr_transform()
753 switch (e->left.expr->type) { in expr_transform()
755 // !!a -> a in expr_transform()
756 tmp = e->left.expr->left.expr; in expr_transform()
757 free(e->left.expr); in expr_transform()
764 // !a='x' -> a!='x' in expr_transform()
765 tmp = e->left.expr; in expr_transform()
768 e->type = e->type == E_EQUAL ? E_UNEQUAL : E_EQUAL; in expr_transform()
772 // !a<='x' -> a>'x' in expr_transform()
773 tmp = e->left.expr; in expr_transform()
776 e->type = e->type == E_LEQ ? E_GTH : E_LTH; in expr_transform()
780 // !a<'x' -> a>='x' in expr_transform()
781 tmp = e->left.expr; in expr_transform()
784 e->type = e->type == E_LTH ? E_GEQ : E_LEQ; in expr_transform()
787 // !(a || b) -> !a && !b in expr_transform()
788 tmp = e->left.expr; in expr_transform()
789 e->type = E_AND; in expr_transform()
790 e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); in expr_transform()
791 tmp->type = E_NOT; in expr_transform()
792 tmp->right.expr = NULL; in expr_transform()
796 // !(a && b) -> !a || !b in expr_transform()
797 tmp = e->left.expr; in expr_transform()
798 e->type = E_OR; in expr_transform()
799 e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); in expr_transform()
800 tmp->type = E_NOT; in expr_transform()
801 tmp->right.expr = NULL; in expr_transform()
805 if (e->left.expr->left.sym == &symbol_yes) { in expr_transform()
806 // !'y' -> 'n' in expr_transform()
807 tmp = e->left.expr; in expr_transform()
810 e->type = E_SYMBOL; in expr_transform()
811 e->left.sym = &symbol_no; in expr_transform()
814 if (e->left.expr->left.sym == &symbol_mod) { in expr_transform()
815 // !'m' -> 'm' in expr_transform()
816 tmp = e->left.expr; in expr_transform()
819 e->type = E_SYMBOL; in expr_transform()
820 e->left.sym = &symbol_mod; in expr_transform()
823 if (e->left.expr->left.sym == &symbol_no) { in expr_transform()
824 // !'n' -> 'y' in expr_transform()
825 tmp = e->left.expr; in expr_transform()
828 e->type = E_SYMBOL; in expr_transform()
829 e->left.sym = &symbol_yes; in expr_transform()
848 switch (dep->type) { in expr_contains_symbol()
851 return expr_contains_symbol(dep->left.expr, sym) || in expr_contains_symbol()
852 expr_contains_symbol(dep->right.expr, sym); in expr_contains_symbol()
854 return dep->left.sym == sym; in expr_contains_symbol()
861 return dep->left.sym == sym || in expr_contains_symbol()
862 dep->right.sym == sym; in expr_contains_symbol()
864 return expr_contains_symbol(dep->left.expr, sym); in expr_contains_symbol()
876 switch (dep->type) { in expr_depends_symbol()
878 return expr_depends_symbol(dep->left.expr, sym) || in expr_depends_symbol()
879 expr_depends_symbol(dep->right.expr, sym); in expr_depends_symbol()
881 return dep->left.sym == sym; in expr_depends_symbol()
883 if (dep->left.sym == sym) { in expr_depends_symbol()
884 if (dep->right.sym == &symbol_yes || dep->right.sym == &symbol_mod) in expr_depends_symbol()
889 if (dep->left.sym == sym) { in expr_depends_symbol()
890 if (dep->right.sym == &symbol_no) in expr_depends_symbol()
906 * A -> A!=n
907 * !A -> A=n
908 * A && B -> !(A=n || B=n)
909 * A || B -> !(A=n && B=n)
910 * A && (B || C) -> !(A=n || (B=n && C=n))
924 switch (e->type) { in expr_trans_compare()
926 e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); in expr_trans_compare()
927 e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym); in expr_trans_compare()
936 e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); in expr_trans_compare()
937 e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym); in expr_trans_compare()
946 return expr_trans_compare(e->left.expr, type == E_EQUAL ? E_UNEQUAL : E_EQUAL, sym); in expr_trans_compare()
970 return expr_alloc_comp(type, e->left.sym, sym); in expr_trans_compare()
1002 val->s = !strcmp(str, "n") ? 0 : in expr_parse_string()
1004 !strcmp(str, "y") ? 2 : -1; in expr_parse_string()
1007 val->s = strtoll(str, &tail, 10); in expr_parse_string()
1011 val->u = strtoull(str, &tail, 16); in expr_parse_string()
1016 val->s = strtoll(str, &tail, 0); in expr_parse_string()
1022 return !errno && !*tail && tail > str && isxdigit(tail[-1]) in expr_parse_string()
1037 switch (e->type) { in expr_calc_value()
1039 sym_calc_value(e->left.sym); in expr_calc_value()
1040 return e->left.sym->curr.tri; in expr_calc_value()
1042 val1 = expr_calc_value(e->left.expr); in expr_calc_value()
1043 val2 = expr_calc_value(e->right.expr); in expr_calc_value()
1046 val1 = expr_calc_value(e->left.expr); in expr_calc_value()
1047 val2 = expr_calc_value(e->right.expr); in expr_calc_value()
1050 val1 = expr_calc_value(e->left.expr); in expr_calc_value()
1060 printf("expr_calc_value: %d?\n", e->type); in expr_calc_value()
1064 sym_calc_value(e->left.sym); in expr_calc_value()
1065 sym_calc_value(e->right.sym); in expr_calc_value()
1066 str1 = sym_get_string_value(e->left.sym); in expr_calc_value()
1067 str2 = sym_get_string_value(e->right.sym); in expr_calc_value()
1069 if (e->left.sym->type != S_STRING || e->right.sym->type != S_STRING) { in expr_calc_value()
1070 k1 = expr_parse_string(str1, e->left.sym->type, &lval); in expr_calc_value()
1071 k2 = expr_parse_string(str2, e->right.sym->type, &rval); in expr_calc_value()
1077 if (e->type != E_EQUAL && e->type != E_UNEQUAL) { in expr_calc_value()
1083 res = (lval.u > rval.u) - (lval.u < rval.u); in expr_calc_value()
1085 res = (lval.s > rval.s) - (lval.s < rval.s); in expr_calc_value()
1087 switch(e->type) { in expr_calc_value()
1101 printf("expr_calc_value: relation %d?\n", e->type); in expr_calc_value()
1134 return -1; in expr_compare_type()
1149 if (expr_compare_type(prevtoken, e->type) > 0) in expr_print()
1151 switch (e->type) { in expr_print()
1153 if (e->left.sym->name) in expr_print()
1154 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1160 expr_print(e->left.expr, fn, data, E_NOT); in expr_print()
1163 if (e->left.sym->name) in expr_print()
1164 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1168 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1172 if (e->left.sym->name) in expr_print()
1173 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1176 fn(data, NULL, e->type == E_LEQ ? "<=" : "<"); in expr_print()
1177 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()
1185 fn(data, NULL, e->type == E_GEQ ? ">=" : ">"); in expr_print()
1186 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1189 if (e->left.sym->name) in expr_print()
1190 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1194 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1197 expr_print(e->left.expr, fn, data, E_OR); in expr_print()
1199 expr_print(e->right.expr, fn, data, E_OR); in expr_print()
1202 expr_print(e->left.expr, fn, data, E_AND); in expr_print()
1204 expr_print(e->right.expr, fn, data, E_AND); in expr_print()
1207 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1208 if (e->left.expr) { in expr_print()
1210 expr_print(e->left.expr, fn, data, E_LIST); in expr_print()
1215 fn(data, e->left.sym, e->left.sym->name); in expr_print()
1217 fn(data, e->right.sym, e->right.sym->name); in expr_print()
1223 sprintf(buf, "<unknown type %d>", e->type); in expr_print()
1228 if (expr_compare_type(prevtoken, e->type) > 0) in expr_print()
1250 if (gs->max_width) { in expr_print_gstr_helper()
1252 const char *last_cr = strrchr(gs->s, '\n'); in expr_print_gstr_helper()
1259 last_cr = gs->s; in expr_print_gstr_helper()
1261 last_line_length = strlen(gs->s) - (last_cr - gs->s); in expr_print_gstr_helper()
1263 if ((last_line_length + extra_length) > gs->max_width) in expr_print_gstr_helper()
1268 if (sym && sym->type != S_UNKNOWN) in expr_print_gstr_helper()
1286 if (e->type == E_OR) { in expr_print_revdep()
1287 expr_print_revdep(e->left.expr, fn, data, pr_type, title); in expr_print_revdep()
1288 expr_print_revdep(e->right.expr, fn, data, pr_type, title); in expr_print_revdep()
1295 fn(data, NULL, " - "); in expr_print_revdep()