moer robust version
This commit is contained in:
parent
b53a5e2540
commit
f67bfc485c
2 changed files with 24 additions and 24 deletions
|
@ -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 */
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue