From: ceriel Date: Wed, 13 May 1987 13:04:28 +0000 (+0000) Subject: bug fix in constant set computations X-Git-Tag: release-5-5~4160 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=6fc7d0f8661a3e1df1c4dd3439d2a6195d604a86;p=ack.git bug fix in constant set computations --- diff --git a/lang/m2/comp/chk_expr.c b/lang/m2/comp/chk_expr.c index 9693d1e26..500b98774 100644 --- a/lang/m2/comp/chk_expr.c +++ b/lang/m2/comp/chk_expr.c @@ -399,14 +399,8 @@ ChkSet(expp) nd = expp->nd_right; /* Now check the elements given, and try to compute a constant set. - First allocate room for the set, but only if it is'nt empty. + First allocate room for the set. */ - if (! nd) { - /* The resulting set IS empty, so we just return - */ - expp->nd_set = 0; - return 1; - } size = tp->tp_size * (sizeof(arith) / word_size); expp->nd_set = (arith *) Malloc(size); clear((char *) (expp->nd_set) , size); diff --git a/lang/m2/comp/cstoper.c b/lang/m2/comp/cstoper.c index 6785c3c07..97b2b362f 100644 --- a/lang/m2/comp/cstoper.c +++ b/lang/m2/comp/cstoper.c @@ -259,10 +259,9 @@ cstset(expp) i = expp->nd_left->nd_INT; expp->nd_class = Value; - expp->nd_INT = (i >= 0 && set2 != 0 && - i < setsize * wrd_bits && + expp->nd_INT = (i >= 0 && i < setsize * wrd_bits && (set2[i / wrd_bits] & (1 << (i % wrd_bits)))); - if (set2) free((char *) set2); + free((char *) set2); } else { set1 = expp->nd_left->nd_set; @@ -272,12 +271,7 @@ cstset(expp) case '+': /* Set union */ - if (!set1) { - resultset = set2; - expp->nd_right->nd_set = 0; - break; - } - if (set2) for (j = 0; j < setsize; j++) { + for (j = 0; j < setsize; j++) { *set1++ |= *set2++; } break; @@ -285,14 +279,6 @@ cstset(expp) case '-': /* Set difference */ - if (!set1 || !set2) { - /* The set from which something is substracted - is already empty, or the set that is - substracted is empty. In either case, the - result set is set1. - */ - break; - } for (j = 0; j < setsize; j++) { *set1++ &= ~*set2++; } @@ -301,19 +287,6 @@ cstset(expp) case '*': /* Set intersection */ - if (!set1) { - /* set1 is empty, and so is the result set - */ - break; - } - if (!set2) { - /* set 2 is empty, so the result set must be - empty too. - */ - resultset = set2; - expp->nd_right->nd_set = 0; - break; - } for (j = 0; j < setsize; j++) { *set1++ &= *set2++; } @@ -322,15 +295,8 @@ cstset(expp) case '/': /* Symmetric set difference */ - if (!set1) { - resultset = set2; - expp->nd_right->nd_set = 0; - break; - } - if (set2) { - for (j = 0; j < setsize; j++) { - *set1++ ^= *set2++; - } + for (j = 0; j < setsize; j++) { + *set1++ ^= *set2++; } break; @@ -344,34 +310,26 @@ cstset(expp) for (j = 0; j < setsize; j++) { switch(expp->nd_symb) { case GREATEREQUAL: - if (!set2) {j = setsize; break; } - if (!set1) break; if ((*set1 | *set2++) != *set1) break; set1++; continue; case LESSEQUAL: - if (!set1) {j = setsize; break; } - if (!set2) break; if ((*set2 | *set1++) != *set2) break; set2++; continue; case '=': case '#': - if (!set1 && !set2) { - j = setsize; break; - } - if (!set1 || !set2) break; if (*set1++ != *set2++) break; continue; } - if (j < setsize) { - expp->nd_INT = expp->nd_symb == '#'; - } - else { - expp->nd_INT = expp->nd_symb != '#'; - } break; } + if (j < setsize) { + expp->nd_INT = expp->nd_symb == '#'; + } + else { + expp->nd_INT = expp->nd_symb != '#'; + } expp->nd_class = Value; expp->nd_symb = INTEGER; if (expp->nd_left->nd_set) {