1: 2: # include "macdefs" 3: # include "manifest" 4: 5: /* storage classes */ 6: # define SNULL 0 7: # define AUTO 1 8: # define EXTERN 2 9: # define STATIC 3 10: # define REGISTER 4 11: # define EXTDEF 5 12: # define LABEL 6 13: # define ULABEL 7 14: # define MOS 8 15: # define PARAM 9 16: # define STNAME 10 17: # define MOU 11 18: # define UNAME 12 19: # define TYPEDEF 13 20: # define FORTRAN 14 21: # define ENAME 15 22: # define MOE 16 23: # define UFORTRAN 17 24: # define USTATIC 18 25: /* field size is ORed in */ 26: # define FIELD 0100 27: # define FLDSIZ 077 28: extern char *scnames(); 29: 30: /* location counters */ 31: # define PROG 0 32: # define DATA 1 33: # define ADATA 2 34: # define STRNG 3 35: # define ISTRNG 4 36: # define STAB 5 37: 38: 39: /* symbol table flags */ 40: # define SMOS 01 41: # define SHIDDEN 02 42: # define SHIDES 04 43: # define SSET 010 44: # define SREF 020 45: 46: # ifndef FIXDEF 47: # define FIXDEF(p) 48: #endif 49: 50: /* alignment of initialized quantities */ 51: # ifndef AL_INIT 52: # define AL_INIT ALINT 53: # endif 54: 55: struct symtab { 56: char sname[NCHNAM]; 57: TWORD stype; /* type word */ 58: 59: char sclass; /* storage class */ 60: char slevel; /* scope level */ 61: char sflags; /* flags for set, use, hidden, mos, etc. */ 62: int offset; /* offset or value */ 63: short dimoff; /* offset into the dimension table */ 64: short sizoff; /* offset into the size table */ 65: short suse; /* line number of last use of the variable */ 66: }; 67: 68: 69: # ifdef ONEPASS 70: /* NOPREF must be defined for use in first pass tree machine */ 71: # define NOPREF 020000 /* no preference for register assignment */ 72: #else 73: 74: union ndu { 75: struct { 76: int op; 77: TWORD type; 78: int cdim, csiz; 79: NODE *left; 80: NODE * right; 81: }; 82: 83: struct { 84: /* this structure is the same as above, 85: but is used when a value, rather than 86: address, is kept in +left */ 87: int op; 88: TWORD type; 89: int cdim, csiz; 90: CONSZ lval; 91: int rval; 92: }; 93: 94: struct { 95: /* this structure is used when a floating point constant 96: is being computed */ 97: int op; 98: TWORD type; 99: int cdim, csiz; 100: double dval; 101: }; 102: 103: }; 104: # endif 105: 106: struct sw { 107: CONSZ sval; 108: int slab; 109: }; 110: 111: extern struct sw swtab[]; 112: extern struct sw *swp; 113: extern int swx; 114: 115: extern int ftnno; 116: extern int blevel; 117: extern int instruct, stwart; 118: 119: extern int lineno, nerrors; 120: typedef union { 121: int intval; 122: NODE * nodep; 123: } YYSTYPE; 124: extern YYSTYPE yylval; 125: 126: extern CONSZ lastcon; 127: extern double dcon; 128: 129: extern char ftitle[]; 130: extern struct symtab stab[]; 131: extern int curftn; 132: extern int curclass; 133: extern int curdim; 134: extern int dimtab[]; 135: extern int paramstk[]; 136: extern int paramno; 137: extern int autooff, argoff, strucoff; 138: extern int regvar; 139: extern int minrvar; 140: extern int brkflag; 141: extern char yytext[]; 142: 143: extern int strflg; 144: 145: extern OFFSZ inoff; 146: 147: extern int reached; 148: 149: /* tunnel to buildtree for name id's */ 150: 151: extern int idname; 152: 153: extern NODE node[]; 154: extern NODE *lastfree; 155: 156: extern int cflag, hflag, pflag; 157: 158: /* various labels */ 159: extern int brklab; 160: extern int contlab; 161: extern int flostat; 162: extern int retlab; 163: extern int retstat; 164: extern int asavbc[], *psavbc; 165: 166: /* flags used in structures/unions */ 167: 168: # define SEENAME 01 169: # define INSTRUCT 02 170: # define INUNION 04 171: # define FUNNYNAME 010 172: 173: /* flags used in the (elementary) flow analysis ... */ 174: 175: # define FBRK 02 176: # define FCONT 04 177: # define FDEF 010 178: # define FLOOP 020 179: 180: /* flags used for return status */ 181: 182: # define RETVAL 1 183: # define NRETVAL 2 184: 185: /* used to mark a constant with no name field */ 186: 187: # define NONAME 040000 188: 189: /* mark an offset which is undefined */ 190: 191: # define NOOFFSET (-10201) 192: 193: /* declarations of various functions */ 194: 195: extern NODE 196: *buildtree(), 197: *bdty(), 198: *mkty(), 199: *rstruct(), 200: *dclstruct(), 201: *getstr(), 202: *tymerge(), 203: *stref(), 204: *offcon(), 205: *bcon(), 206: *bpsize(), 207: *convert(), 208: *pconvert(), 209: *oconvert(), 210: *ptmatch(), 211: *tymatch(), 212: *makety(), 213: *block(), 214: *doszof(), 215: *talloc(), 216: *optim(), 217: *strargs(), 218: *clocal(); 219: 220: OFFSZ tsize(), 221: psize(); 222: 223: TWORD types(); 224: 225: 226: double atof(); 227: 228: char *exname(), *exdcon(); 229: 230: # define checkst(x) 231: 232: # ifndef CHARCAST 233: /* to make character constants into character connstants */ 234: /* this is a macro to defend against cross-compilers, etc. */ 235: # define CHARCAST(x) (char)(x) 236: # endif