moer robust version

This commit is contained in:
ceriel 1987-03-31 08:16:41 +00:00
parent b53a5e2540
commit f67bfc485c
2 changed files with 24 additions and 24 deletions

View file

@ -106,7 +106,7 @@ int EM_wordsize, EM_pointersize;
#ifdef CHECKING #ifdef CHECKING
static char *argrange = "Argument range error"; static char *argrange = "Argument range error";
#define check(expr) (expr || (xerror(argrange))) #define check(expr) (expr || !EM_error || (EM_error = argrange))
#else not CHECKING #else not CHECKING
#define check(x) /* nothing */ #define check(x) /* nothing */
#endif CHECKING #endif CHECKING
@ -204,7 +204,7 @@ startmes(p)
if (ap->em_cst == ms_emx) { if (ap->em_cst == ms_emx) {
if (wsize || psize) { if (wsize || psize) {
xerror("Duplicate ms_emx"); if (!EM_error) EM_error = "Duplicate ms_emx";
} }
argp = ap = getarg(cst_ptyp); argp = ap = getarg(cst_ptyp);
wsize = ap->em_cst; wsize = ap->em_cst;
@ -344,7 +344,8 @@ EM_getinstr()
/* Check that the last value is 0 or 1 /* Check that the last value is 0 or 1
*/ */
if (ap1->em_cst != 1 && ap1->em_cst != 0) { if (ap1->em_cst != 1 && ap1->em_cst != 0) {
xerror("Third argument of hol/bss not 0/1"); if (! EM_error)
EM_error="Third argument of hol/bss not 0/1";
} }
#endif CHECKING #endif CHECKING
break; break;
@ -391,10 +392,11 @@ EM_getinstr()
startmes(p); startmes(p);
break; break;
} }
if (!wsize) { if (!wsize && !EM_error) {
xerror("EM code should start with mes 2"); wsize = 2;
psize = 2;
EM_error = "EM code should start with mes 2";
} }
if (EM_error && p->em_type != EM_FATAL) p->em_type = EM_ERROR;
return p; return p;
} }
@ -413,10 +415,10 @@ EM_getinstr()
default: default:
assert(0); assert(0);
case MES: case MES:
xerror("String too long in message"); if (!EM_error)
/* p->em_type = EM_MESARG; EM_error = "String too long in message";
p->em_arg = args; p->em_type = EM_MESARG;
*/ p->em_arg = args;
break; break;
case CON: case CON:
p->em_type = EM_PSEU; p->em_type = EM_PSEU;
@ -429,14 +431,12 @@ EM_getinstr()
p->em_args = args; p->em_args = args;
break; break;
} }
if (EM_error && p->em_type != EM_FATAL) p->em_type = EM_ERROR;
return p; return p;
} }
/* Here, we are in a state reading arguments */ /* Here, we are in a state reading arguments */
args = getarg(any_ptyp); args = getarg(any_ptyp);
if (EM_error && p->em_type != EM_FATAL) { if (EM_error && p->em_type != EM_FATAL) {
p->em_type = EM_ERROR;
return p; return p;
} }
if (!args) { /* No more arguments */ if (!args) { /* No more arguments */

View file

@ -71,8 +71,8 @@ getarg(typset)
ap->em_noff = 0; ap->em_noff = 0;
ap->em_argtype = nof_ptyp; ap->em_argtype = nof_ptyp;
#ifdef CHECKING #ifdef CHECKING
if (ap->em_dlb < 0) { if (ap->em_dlb < 0 && !EM_error) {
xerror("Illegal data label"); EM_error = "Illegal data label";
break; break;
} }
#endif CHECKING #endif CHECKING
@ -87,8 +87,8 @@ getarg(typset)
ap->em_ilb = get16(); ap->em_ilb = get16();
ap->em_argtype = ilb_ptyp; ap->em_argtype = ilb_ptyp;
#ifdef CHECKING #ifdef CHECKING
if (ap->em_ilb < 0) { if (ap->em_ilb < 0 && !EM_error) {
xerror("Illegal instruction label"); EM_error = "Illegal instruction label";
break; break;
} }
#endif CHECKING #endif CHECKING
@ -195,8 +195,8 @@ getarg(typset)
return 0; return 0;
} }
if ((typset & (1 << i)) == 0) { if ((typset & (1 << i)) == 0 && !EM_error) {
xerror("Bad argument type"); EM_error = "Bad argument type";
} }
if (argtyp == sp_cend) return 0; if (argtyp == sp_cend) return 0;
#else not CHECKING #else not CHECKING
@ -276,8 +276,8 @@ getstring(isident)
#ifdef CHECKING #ifdef CHECKING
if (isident) { if (isident) {
if (!checkident(s)) { if (!checkident(s) && !EM_error) {
xerror("Illegal identifier"); EM_error = "Illegal identifier";
} }
} }
#endif CHECKING #endif CHECKING
@ -326,8 +326,8 @@ gethead()
p->em_type = EM_DEFILB; p->em_type = EM_DEFILB;
p->em_deflb = get16(); p->em_deflb = get16();
#ifdef CHECKING #ifdef CHECKING
if (p->em_deflb < 0) { if (p->em_deflb < 0 && !EM_error) {
xerror("Illegal instruction label definition"); EM_error = "Illegal instruction label definition";
} }
#endif CHECKING #endif CHECKING
break; break;
@ -341,8 +341,8 @@ gethead()
p->em_type = EM_DEFDLB; p->em_type = EM_DEFDLB;
p->em_deflb = get16(); p->em_deflb = get16();
#ifdef CHECKING #ifdef CHECKING
if (p->em_deflb < 0) { if (p->em_deflb < 0 && !EM_error) {
xerror("Illegal data label definition"); EM_error = "Illegal data label definition";
} }
#endif CHECKING #endif CHECKING
break; break;