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