|
|
1.1 root 1: #include "trace.h"
2: #include "trace.d"
3:
4: extern struct TBL *tbl;
5: extern int *globvars, nrvars;
6: extern int assertbl, abase, errortbl, ebase;
7:
8: require(TT, stuff, by)
9: {
10: if (assertbl != NONE)
11: assert(TT, stuff, by);
12: if (errortbl != NONE)
13: errort(TT, stuff, by);
14: }
15:
16: inscope(TT, stuff, by)
17: { register int i;
18:
19: for (i = 0; i < tbl[assertbl].nrcols; i++)
20: if (TT == tbl[assertbl].coltyp[i]
21: && stuff == tbl[assertbl].colmap[i]
22: && by == tbl[assertbl].colorg[i])
23: return 1;
24:
25: return 0;
26: }
27:
28: assert(TT, stuff, by)
29: { int h, i, j, x, frst;
30:
31: for (frst = 0; frst < tbl[assertbl].nrcols; frst++)
32: if (tbl[assertbl].coltyp[frst] == TT
33: && stuff == tbl[assertbl].colmap[frst]
34: && by == tbl[assertbl].colorg[frst])
35: break;
36:
37: if (frst == tbl[assertbl].nrcols)
38: return; /* not within assertion's scope */
39:
40: for (i = 0; i < tbl[assertbl].nrrows; i++)
41: {
42: if (globvars[i+abase] != 1)
43: continue;
44:
45: for (j = frst; j < tbl[assertbl].nrcols; j++)
46: {
47: if (TT == tbl[assertbl].coltyp[j]
48: && stuff == tbl[assertbl].colmap[j]
49: && by == tbl[assertbl].colorg[j])
50: {
51: if (tbl[assertbl].ptr[i][j].nrpils == 0)
52: output("assertion violated: ", 1);
53: else
54: for (h = 0; h < tbl[assertbl].ptr[i][j].nrpils; h++)
55: { x = tbl[assertbl].ptr[i][j].one[h].transf;
56: globvars[x+abase] = 2;
57: globvars[i+abase] = 0;
58: } } }}
59: for (i = abase; i < nrvars; i++)
60: if (globvars[i] == 2)
61: globvars[i] = 1;
62: }
63:
64: assertholds()
65: { int i;
66: if (assertbl == NONE)
67: return 1;
68:
69: for (i = abase; i < nrvars; i++)
70: if (globvars[i] && tbl[assertbl].endrow[i-abase])
71: return 1;
72: return 0;
73: }
74:
75: errort(TT, stuff, by)
76: { int h, i, j, x, frst;
77:
78: for (frst = 0; frst < tbl[errortbl].nrcols; frst++)
79: if (tbl[errortbl].coltyp[frst] == TT
80: && stuff == tbl[errortbl].colmap[frst]
81: && by == tbl[errortbl].colorg[frst])
82: break;
83:
84: if (frst == tbl[errortbl].nrcols)
85: return; /* not within assertion's scope */
86:
87: for (i = 0; i < tbl[errortbl].nrrows; i++)
88: {
89: if (globvars[i+ebase] != 1)
90: continue;
91:
92: for (j = frst; j < tbl[errortbl].nrcols; j++)
93: {
94: if (TT == tbl[errortbl].coltyp[j]
95: && stuff == tbl[errortbl].colmap[j]
96: && by == tbl[errortbl].colorg[j])
97: {
98: if (tbl[errortbl].ptr[i][j].nrpils == 0)
99: globvars[i+ebase] = 0;
100: else
101: for (h = 0; h < tbl[errortbl].ptr[i][j].nrpils; h++)
102: { x = tbl[errortbl].ptr[i][j].one[h].transf;
103: globvars[x+ebase] = 2;
104: globvars[i+ebase] = 0;
105: }
106: }
107: }
108: }
109: for (i = ebase; i < nrvars; i++)
110: if (globvars[i] == 2)
111: { globvars[i] = 1;
112: if (tbl[errortbl].endrow[i-ebase])
113: output("error matched: ", 2);
114: }
115: globvars[ebase] = 1;
116: }
117:
118: peekassert(ice)
119: struct FREEZE *ice;
120: { register int i;
121: if (assertbl != NONE)
122: for (i = abase; i < nrvars; i++)
123: globvars[i] = ice->varsaved[i];
124: else if (errortbl != NONE)
125: for (i = ebase; i < nrvars; i++)
126: globvars[i] = ice->varsaved[i];
127: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.