|
|
1.1 ! root 1: /* ! 2: * C compiler intermediate file printer. ! 3: * Tree handler. ! 4: */ ! 5: #ifdef vax ! 6: #include "INC$LIB:cc3.h" ! 7: #else ! 8: #include "cc3.h" ! 9: #endif ! 10: ! 11: /* ! 12: * Print a tree. ! 13: * The 'op' is the temp. file opcode that introduced the tree. ! 14: * The conditional trees must read in the label. ! 15: * The tree is printed between walls, with a title in the first wall. ! 16: */ ! 17: itree(op) ! 18: { ! 19: strcpy(id, ilonames[op]); ! 20: if (op==TEXPR || op==FEXPR) ! 21: sprintf(id, "%s to L%d", ilonames[op], iget()); ! 22: iwall(id); ! 23: itree1(0); ! 24: fputc('\t', ofp); ! 25: iwall(NULL); ! 26: } ! 27: ! 28: /* ! 29: * Read and print a tree node and its subtrees. ! 30: */ ! 31: itree1(n) ! 32: int n; ! 33: { ! 34: register int i; ! 35: register int op; ! 36: register int type; ! 37: char *opid; ! 38: int seg; ! 39: dval_t dval; ! 40: sizeof_t offs; ! 41: int width, base; ! 42: extern char *milnames[]; ! 43: extern char *mionames[]; ! 44: extern char *mdlnames[]; ! 45: extern char *mdonames[]; ! 46: ! 47: if ((op=iget()) == NIL) ! 48: return; ! 49: fputc('\t', ofp); ! 50: i = n; ! 51: while (i--) ! 52: fputc(' ', ofp); ! 53: if (op < MDLBASE) ! 54: opid = milnames[op]; ! 55: else if (op < MIOBASE) ! 56: opid = mdlnames[op-MDLBASE]; ! 57: else if (op < MDOBASE) ! 58: opid = mionames[op-MIOBASE]; ! 59: else if (op < ETCBASE) ! 60: opid = mdonames[op-MDOBASE]; ! 61: else ! 62: sprintf(opid, "Bad == %d", op); ! 63: type = bget(); ! 64: fprintf(ofp, "%s %s ", opid, tynames[type]); ! 65: if (type == BLK) ! 66: fprintf(ofp, "(%d bytes) ", iget()); ! 67: switch (op) { ! 68: ! 69: case ICON: ! 70: fprintf(ofp, "%d", iget()); ! 71: break; ! 72: ! 73: case LCON: ! 74: fprintf(ofp, "%ld", lget()); ! 75: break; ! 76: ! 77: case ZCON: ! 78: fprintf(ofp, "%ld", (long)zget()); ! 79: break; ! 80: ! 81: case DCON: ! 82: dget(dval); ! 83: gendval(dval); ! 84: break; ! 85: ! 86: case REG: ! 87: fprintf(ofp, "%s", regnames[iget()]); ! 88: break; ! 89: ! 90: case AID: ! 91: case PID: ! 92: fprintf(ofp, "at %ld", (long)zget()); ! 93: break; ! 94: ! 95: case LID: ! 96: case GID: ! 97: offs = zget(); ! 98: seg = bget(); ! 99: fprintf(ofp, "%s.", segnames[seg]); ! 100: if (op == LID) ! 101: fprintf(ofp, "L%d", iget()); ! 102: else { ! 103: sget(id, NCSYMB); ! 104: fprintf(ofp, "%s", id); ! 105: } ! 106: if (offs != 0) { ! 107: if (offs > 0) ! 108: fputc('+', ofp); ! 109: fprintf(ofp, "%ld", (long)offs); ! 110: } ! 111: break; ! 112: ! 113: case FIELD: ! 114: width = bget(); ! 115: base = bget(); ! 116: fprintf(ofp, "base=%d width=%d\n", base, width); ! 117: itree1(n+2); ! 118: return; ! 119: ! 120: default: ! 121: if (op < MIOBASE) { ! 122: genmdl(op); ! 123: break; ! 124: } else if (op < MDOBASE) { ! 125: fputc('\n', ofp); ! 126: itree1(n+2); /* Left */ ! 127: itree1(n+2); /* Right */ ! 128: return; ! 129: } else { ! 130: genmdo(op); ! 131: return; ! 132: } ! 133: } ! 134: fputc('\n', ofp); ! 135: } ! 136: ! 137: /* ! 138: * Print a wall with the title string 's' in it. ! 139: * The wall is always WIDTH long. ! 140: */ ! 141: iwall(s) ! 142: register char *s; ! 143: { ! 144: register int n; ! 145: n = WIDTH; ! 146: if (s != NULL) { ! 147: fprintf(ofp, "%s ", s); ! 148: n -= strlen(s) + 1; ! 149: } ! 150: while (--n >= 0) ! 151: fputc('-', ofp); ! 152: fputc('\n', ofp); ! 153: } ! 154:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.