the arguments.
*/
if (GetToken(&tk) != INTEGER) {
- error("bad #line syntax");
+ lexerror("bad #line syntax");
SkipToNewLine();
}
else
if (((tok = GetToken(&tk)) == FILESPECIFIER) || tok == STRING)
filenm = tk.tk_bts;
else {
- error("bad include syntax");
+ lexerror("bad include syntax");
filenm = (char *)0;
}
AccFileSpecifier = 0;
if (SkipToNewLine()) {
- error("bad include syntax");
+ lexerror("bad include syntax");
}
inctable[0] = WorkingDir;
if (filenm) {
if (!InsertFile(filenm, &inctable[tok==FILESPECIFIER],&result)){
- error("cannot open include file \"%s\"", filenm);
+ lexerror("cannot open include file \"%s\"", filenm);
add_dependency(filenm);
}
else {
*/
for (pbuf2 = pbuf - 1; pbuf2 >= &buf[0]; pbuf2--) {
if (!strcmp(*pbuf2, *pbuf)) {
- error("formal parameter \"%s\" already used",
+ lexerror("formal parameter \"%s\" already used",
*pbuf);
}
}
EoiForNewline = 0;
return;
}
- error("illegal # line");
+ lexerror("illegal # line");
EoiForNewline = 0;
SkipToNewLine();
}
extern char options[];
+int density = DENSITY;
+
compact(nr, low, up)
arith low, up;
{
*/
arith diff = up - low;
- return (nr == 0 || (diff >= 0 && diff / nr <= (DENSITY - 1)));
+ return (nr == 0 || (diff >= 0 && diff / nr <= (density - 1)));
}
static struct switch_hdr *switch_stack = 0;
#ifndef LINT
code_expr(sh->sh_expr, RVAL, TRUE, NO_LABEL, NO_LABEL);
#endif
- tablabel = data_label(); /* the rom must have a label */
- C_df_dlb(tablabel);
- C_rom_ilb(sh->sh_default);
- if (compact(sh->sh_nrofentries, sh->sh_lowerbd, sh->sh_upperbd)) {
+ if (sh->sh_nrofentries <= 1) {
+ if (sh->sh_nrofentries) {
+ load_cst(sh->sh_lowerbd, size);
+ C_cms(size);
+ C_zeq(sh->sh_entries->ce_label);
+ }
+ else C_asp(size);
+ C_bra(sh->sh_default);
+ }
+ else {
+ tablabel = data_label(); /* the rom must have a label */
+ C_df_dlb(tablabel);
+ C_rom_ilb(sh->sh_default);
+ if (compact(sh->sh_nrofentries, sh->sh_lowerbd, sh->sh_upperbd)) {
/* CSA */
register arith val;
C_rom_icon(long2str((long)(sh->sh_upperbd - sh->sh_lowerbd),10),
size);
ce = sh->sh_entries;
- if (sh->sh_nrofentries)
- for (val = sh->sh_lowerbd; val <= sh->sh_upperbd; val++) {
+ for (val = sh->sh_lowerbd; val <= sh->sh_upperbd; val++) {
ASSERT(ce);
if (val == ce->ce_value) {
C_rom_ilb(ce->ce_label);
}
C_lae_dlb(tablabel, (arith)0); /* perform the switch */
C_csa(size);
- }
- else { /* CSB */
+ }
+ else { /* CSB */
C_rom_icon(long2str((long)sh->sh_nrofentries,10),size);
for (ce = sh->sh_entries; ce; ce = ce->next) {
/* generate the entries: value + prog.label */
}
C_lae_dlb(tablabel, (arith)0); /* perform the switch */
C_csb(size);
+ }
}
C_df_ilb(sh->sh_break);
switch_stack = sh->next; /* unstack the switch descriptor */