From: ceriel Date: Fri, 13 Nov 1987 16:19:51 +0000 (+0000) Subject: generate CSA for empty case statement X-Git-Tag: release-5-5~3728 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=808e5d8c7da5c0dc60162b537fb357af3b626ff1;p=ack.git generate CSA for empty case statement --- diff --git a/lang/m2/comp/casestat.C b/lang/m2/comp/casestat.C index 5d163a047..55a22058c 100644 --- a/lang/m2/comp/casestat.C +++ b/lang/m2/comp/casestat.C @@ -73,7 +73,7 @@ compact(nr, low, up) */ arith diff = up - low; - return (nr != 0 && diff >= 0 && diff / nr <= (DENSITY - 1)); + return (nr == 0 || (diff >= 0 && diff / nr <= (DENSITY - 1))); } CaseCode(nd, exitlabel) @@ -90,7 +90,6 @@ CaseCode(nd, exitlabel) register struct case_entry *ce; register arith val; label CaseDescrLab; - int casecnt = 0; assert(pnode->nd_class == Stat && pnode->nd_symb == CASE); @@ -109,7 +108,6 @@ CaseCode(nd, exitlabel) /* non-empty case */ pnode->nd_lab = ++text_label; - casecnt++; if (! AddCases(sh, /* to descriptor */ pnode->nd_left->nd_left, /* of case labels */ @@ -130,7 +128,7 @@ CaseCode(nd, exitlabel) } } - if (!casecnt) { + if (!sh->sh_nrofentries) { /* There were no cases, so we have to check the case-expression here */ @@ -154,7 +152,8 @@ CaseCode(nd, exitlabel) C_rom_cst(sh->sh_lowerbd); C_rom_cst(sh->sh_upperbd - sh->sh_lowerbd); ce = sh->sh_entries; - for (val = sh->sh_lowerbd; val <= sh->sh_upperbd; val++) { + if (sh->sh_nrofentries) + for (val = sh->sh_lowerbd; val <= sh->sh_upperbd; val++) { assert(ce); if (val == ce->ce_value) { C_rom_ilb(ce->ce_label);