|
|
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.