1 #define INTERDATA 2 2 #define GCOS 3 3 #define PDP11 4 4 #define IBM 5 5 #define CMACH 6 6 #define VAX 7 7 8 #define DMR 2 9 #define PCC 3 10 11 #ifndef FAMILY 12 FAMILY NOT DEFINED !!! 13 Family = FAMILY 14 #endif 15 16 #ifndef HERE 17 HERE NOT DEFINED !!!! 18 Here = HERE 19 #endif 20 21 #define M(x) (1<<x) 22 #define ALLOC(x) (struct x *) ckalloc(sizeof(struct x)) 23 #define ALLOCN(n,x) (struct x *) ckalloc(n*sizeof(struct x)) 24 #define ALLEXPR (expptr) ckalloc( sizeof(union Expression) ) 25 typedef int *ptr; 26 typedef char *charptr; 27 typedef FILE *FILEP; 28 typedef short flag; 29 typedef char field; /* actually need only 4 bits */ 30 typedef long int ftnint; 31 #define LOCAL static 32 33 #define NO 0 34 #define YES 1 35 36 #define CNULL (char *) 0 37 #define PNULL (ptr) 0 38 #define CHNULL (chainp) 0 39 #define ENULL (expptr) 0 40 41 42 43 /* block tag values */ 44 45 #define TNAME 1 46 #define TCONST 2 47 #define TEXPR 3 48 #define TADDR 4 49 #define TTEMP 5 50 #define TPRIM 6 51 #define TLIST 7 52 #define TIMPLDO 8 53 #define TERROR 9 54 55 56 /* parser states */ 57 58 #define OUTSIDE 0 59 #define INSIDE 1 60 #define INDCL 2 61 #define INDATA 3 62 #define INEXEC 4 63 64 /* procedure classes */ 65 66 #define PROCMAIN 1 67 #define PROCBLOCK 2 68 #define PROCSUBR 3 69 #define PROCFUNCT 4 70 71 72 /* storage classes -- vstg values */ 73 74 #define STGUNKNOWN 0 75 #define STGARG 1 76 #define STGAUTO 2 77 #define STGBSS 3 78 #define STGINIT 4 79 #define STGCONST 5 80 #define STGEXT 6 81 #define STGINTR 7 82 #define STGSTFUNCT 8 83 #define STGCOMMON 9 84 #define STGEQUIV 10 85 #define STGREG 11 86 #define STGLENG 12 87 #define STGNULL 13 88 #define STGPREG 14 89 90 /* name classes -- vclass values */ 91 92 #define CLUNKNOWN 0 93 #define CLPARAM 1 94 #define CLVAR 2 95 #define CLENTRY 3 96 #define CLMAIN 4 97 #define CLBLOCK 5 98 #define CLPROC 6 99 #define CLNAMELIST 7 100 101 102 /* vprocclass values */ 103 104 #define PUNKNOWN 0 105 #define PEXTERNAL 1 106 #define PINTRINSIC 2 107 #define PSTFUNCT 3 108 #define PTHISPROC 4 109 110 /* control stack codes */ 111 112 #define CTLDO 1 113 #define CTLIF 2 114 #define CTLELSE 3 115 116 117 /* operators -- see also arrays 'ops' and 'ops2' in put.c */ 118 119 #define OPPLUS 1 120 #define OPMINUS 2 121 #define OPSTAR 3 122 #define OPSLASH 4 123 #define OPPOWER 5 124 #define OPNEG 6 125 #define OPOR 7 126 #define OPAND 8 127 #define OPEQV 9 128 #define OPNEQV 10 129 #define OPNOT 11 130 #define OPCONCAT 12 131 #define OPLT 13 132 #define OPEQ 14 133 #define OPGT 15 134 #define OPLE 16 135 #define OPNE 17 136 #define OPGE 18 137 #define OPCALL 19 138 #define OPCCALL 20 139 #define OPASSIGN 21 140 #define OPPLUSEQ 22 141 #define OPSTAREQ 23 142 #define OPCONV 24 143 #define OPLSHIFT 25 144 #define OPMOD 26 145 #define OPCOMMA 27 146 #define OPQUEST 28 147 #define OPCOLON 29 148 #define OPABS 30 149 #define OPMIN 31 150 #define OPMAX 32 151 #define OPADDR 33 152 #define OPINDIRECT 34 153 #define OPBITOR 35 154 #define OPBITAND 36 155 #define OPBITXOR 37 156 #define OPBITNOT 38 157 #define OPRSHIFT 39 158 #define OPPAREN 40 159 #define OPUNARYPLUS 41 160 161 162 /* label type codes */ 163 164 #define LABUNKNOWN 0 165 #define LABEXEC 1 166 #define LABFORMAT 2 167 #define LABOTHER 3 168 169 170 /* INTRINSIC function codes*/ 171 172 #define INTREND 0 173 #define INTRCONV 1 174 #define INTRMIN 2 175 #define INTRMAX 3 176 #define INTRGEN 4 177 #define INTRSPEC 5 178 #define INTRBOOL 6 179 #define INTRCNST 7 180 181 182 /* I/O statement codes */ 183 184 #define IOSTDIN ICON(5) 185 #define IOSTDOUT ICON(6) 186 #define IOSTDERR ICON(0) 187 188 #define IOSBAD (-1) 189 #define IOSPOSITIONAL 0 190 #define IOSUNIT 1 191 #define IOSFMT 2 192 193 #define IOINQUIRE 1 194 #define IOOPEN 2 195 #define IOCLOSE 3 196 #define IOREWIND 4 197 #define IOBACKSPACE 5 198 #define IOENDFILE 6 199 #define IOREAD 7 200 #define IOWRITE 8 201 202 203 /* type masks */ 204 205 #define MSKLOGICAL M(TYLOGICAL) 206 #define MSKADDR M(TYADDR) 207 #define MSKCHAR M(TYCHAR) 208 #define MSKINT M(TYSHORT)|M(TYLONG) 209 #define MSKREAL M(TYREAL)|M(TYDREAL) 210 #define MSKCOMPLEX M(TYCOMPLEX)|M(TYDCOMPLEX) 211 #define MSKSTATIC (M(STGINIT)|M(STGBSS)|M(STGCOMMON)|M(STGEQUIV)|M(STGCONST)) 212 213 /* miscellaneous macros */ 214 215 #define ONEOF(x,y) (M(x) & (y)) 216 #define ISCOMPLEX(z) ONEOF(z, MSKCOMPLEX) 217 #define ISREAL(z) ONEOF(z, MSKREAL) 218 #define ISNUMERIC(z) ONEOF(z, MSKINT|MSKREAL|MSKCOMPLEX) 219 #define ISICON(z) (z->tag==TCONST && ISINT(z->constblock.vtype)) 220 #define ISCHAR(z) (z->headblock.vtype==TYCHAR) 221 #define ISINT(z) ONEOF(z, MSKINT) 222 #define ISCONST(z) (z->tag==TCONST) 223 #define ISERROR(z) (z->tag==TERROR) 224 #define ISPLUSOP(z) (z->tag==TEXPR && z->exprblock.opcode==OPPLUS) 225 #define ISSTAROP(z) (z->tag==TEXPR && z->exprblock.opcode==OPSTAR) 226 #define ISONE(z) (ISICON(z) && z->constblock.constant.ci==1) 227 #define INT(z) ONEOF(z, MSKINT|MSKCHAR) 228 #define ICON(z) mkintcon( (ftnint)(z) ) 229 230 #define NO66(s) if(no66flag) err66(s) 231 #define NOEXT(s) if(noextflag) errext(s) 232 233 /* round a up to a multiple of b */ 234 #define roundup(a,b) ( b * ( (a+b-1)/b) ) 235 236 237 /* optimization buffer slot types */ 238 239 #define SKNULL 0 240 #define SKIFN 1 241 #define SKGOTO 2 242 #define SKLABEL 3 243 #define SKEQ 4 244 #define SKCALL 5 245 #define SKCMGOTO 6 246 #define SKSTOP 7 247 #define SKDOHEAD 8 248 #define SKENDDO 9 249 #define SKARIF 10 250 #define SKRETURN 11 251 #define SKASGOTO 12 252 #define SKPAUSE 13 253 #define SKASSIGN 14 254 #define SKIOIFN 15 255 #define SKFRTEMP 16 256