|
|
researchv10 Norman
#include "trace.h"
#include "trace.d"
extern struct TBL *tbl;
extern int *globvars, nrvars;
extern int assertbl, abase, errortbl, ebase;
require(TT, stuff, by)
{
if (assertbl != NONE)
assert(TT, stuff, by);
if (errortbl != NONE)
errort(TT, stuff, by);
}
inscope(TT, stuff, by)
{ register int i;
for (i = 0; i < tbl[assertbl].nrcols; i++)
if (TT == tbl[assertbl].coltyp[i]
&& stuff == tbl[assertbl].colmap[i]
&& by == tbl[assertbl].colorg[i])
return 1;
return 0;
}
assert(TT, stuff, by)
{ int h, i, j, x, frst;
for (frst = 0; frst < tbl[assertbl].nrcols; frst++)
if (tbl[assertbl].coltyp[frst] == TT
&& stuff == tbl[assertbl].colmap[frst]
&& by == tbl[assertbl].colorg[frst])
break;
if (frst == tbl[assertbl].nrcols)
return; /* not within assertion's scope */
for (i = 0; i < tbl[assertbl].nrrows; i++)
{
if (globvars[i+abase] != 1)
continue;
for (j = frst; j < tbl[assertbl].nrcols; j++)
{
if (TT == tbl[assertbl].coltyp[j]
&& stuff == tbl[assertbl].colmap[j]
&& by == tbl[assertbl].colorg[j])
{
if (tbl[assertbl].ptr[i][j].nrpils == 0)
output("assertion violated: ", 1);
else
for (h = 0; h < tbl[assertbl].ptr[i][j].nrpils; h++)
{ x = tbl[assertbl].ptr[i][j].one[h].transf;
globvars[x+abase] = 2;
globvars[i+abase] = 0;
} } }}
for (i = abase; i < nrvars; i++)
if (globvars[i] == 2)
globvars[i] = 1;
}
assertholds()
{ int i;
if (assertbl == NONE)
return 1;
for (i = abase; i < nrvars; i++)
if (globvars[i] && tbl[assertbl].endrow[i-abase])
return 1;
return 0;
}
errort(TT, stuff, by)
{ int h, i, j, x, frst;
for (frst = 0; frst < tbl[errortbl].nrcols; frst++)
if (tbl[errortbl].coltyp[frst] == TT
&& stuff == tbl[errortbl].colmap[frst]
&& by == tbl[errortbl].colorg[frst])
break;
if (frst == tbl[errortbl].nrcols)
return; /* not within assertion's scope */
for (i = 0; i < tbl[errortbl].nrrows; i++)
{
if (globvars[i+ebase] != 1)
continue;
for (j = frst; j < tbl[errortbl].nrcols; j++)
{
if (TT == tbl[errortbl].coltyp[j]
&& stuff == tbl[errortbl].colmap[j]
&& by == tbl[errortbl].colorg[j])
{
if (tbl[errortbl].ptr[i][j].nrpils == 0)
globvars[i+ebase] = 0;
else
for (h = 0; h < tbl[errortbl].ptr[i][j].nrpils; h++)
{ x = tbl[errortbl].ptr[i][j].one[h].transf;
globvars[x+ebase] = 2;
globvars[i+ebase] = 0;
}
}
}
}
for (i = ebase; i < nrvars; i++)
if (globvars[i] == 2)
{ globvars[i] = 1;
if (tbl[errortbl].endrow[i-ebase])
output("error matched: ", 2);
}
globvars[ebase] = 1;
}
peekassert(ice)
struct FREEZE *ice;
{ register int i;
if (assertbl != NONE)
for (i = abase; i < nrvars; i++)
globvars[i] = ice->varsaved[i];
else if (errortbl != NONE)
for (i = ebase; i < nrvars; i++)
globvars[i] = ice->varsaved[i];
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.