|
|
1.1 root 1: #define PDP11 4
2:
3: #define BIGGEST_CHAR 0x7f /* Assumes 32-bit arithmetic */
4: #define BIGGEST_SHORT 0x7fff /* Assumes 32-bit arithmetic */
5: #define BIGGEST_LONG 0x7fffffff /* Assumes 32-bit arithmetic */
6:
7: #define M(x) (1<<x) /* Mask (x) returns 2^x */
8:
9: #define ALLOC(x) (struct x *) ckalloc((int)sizeof(struct x))
10: #define ALLEXPR (expptr) ckalloc((int)sizeof(union Expression) )
11: typedef int *ptr;
12: typedef char *charptr;
13: typedef FILE *FILEP;
14: typedef int flag;
15: typedef char field; /* actually need only 4 bits */
16: typedef long int ftnint;
17: #define LOCAL static
18:
19: #define NO 0
20: #define YES 1
21:
22: #define CNULL (char *) 0 /* Character string null */
23: #define PNULL (ptr) 0
24: #define CHNULL (chainp) 0 /* Chain null */
25: #define ENULL (expptr) 0
26:
27:
28: /* BAD_MEMNO - used to distinguish between long string constants and other
29: constants in the table */
30:
31: #define BAD_MEMNO -32768
32:
33:
34: /* block tag values -- syntactic stuff */
35:
36: #define TNAME 1
37: #define TCONST 2
38: #define TEXPR 3
39: #define TADDR 4
40: #define TPRIM 5 /* Primitive datum - should not appear in an
41: expptr variable, it should have already been
42: identified */
43: #define TLIST 6
44: #define TIMPLDO 7
45: #define TERROR 8
46:
47:
48: /* parser states - order is important, since there are several tests for
49: state < INDATA */
50:
51: #define OUTSIDE 0
52: #define INSIDE 1
53: #define INDCL 2
54: #define INDATA 3
55: #define INEXEC 4
56:
57: /* procedure classes */
58:
59: #define PROCMAIN 1
60: #define PROCBLOCK 2
61: #define PROCSUBR 3
62: #define PROCFUNCT 4
63:
64:
65: /* storage classes -- vstg values. BSS and INIT are used in the later
66: merge pass over identifiers; and they are entered differently into the
67: symbol table */
68:
69: #define STGUNKNOWN 0
70: #define STGARG 1 /* adjustable dimensions */
71: #define STGAUTO 2 /* for stack references */
72: #define STGBSS 3 /* uninitialized storage (normal variables) */
73: #define STGINIT 4 /* initialized storage */
74: #define STGCONST 5
75: #define STGEXT 6 /* external storage */
76: #define STGINTR 7 /* intrinsic (late decision) reference. See
77: chapter 5 of the Fortran 77 standard */
78: #define STGSTFUNCT 8
79: #define STGCOMMON 9
80: #define STGEQUIV 10
81: #define STGREG 11 /* register - the outermost DO loop index will be
82: in a register (because the compiler is one
83: pass, it can't know where the innermost loop is
84: */
85: #define STGLENG 12
86: #define STGNULL 13
87: #define STGMEMNO 14 /* interemediate-file pointer to constant table */
88:
89: /* name classes -- vclass values, also procclass values */
90:
91: #define CLUNKNOWN 0
92: #define CLPARAM 1 /* Parameter - macro definition */
93: #define CLVAR 2 /* variable */
94: #define CLENTRY 3
95: #define CLMAIN 4
96: #define CLBLOCK 5
97: #define CLPROC 6
98: #define CLNAMELIST 7 /* in data with this tag, the vdcldone flag should
99: be ignored (according to vardcl()) */
100:
101:
102: /* vprocclass values -- there is some overlap with the vclass values given
103: above */
104:
105: #define PUNKNOWN 0
106: #define PEXTERNAL 1
107: #define PINTRINSIC 2
108: #define PSTFUNCT 3
109: #define PTHISPROC 4 /* here to allow recursion - further distinction
110: is given in the CL tag (those just above).
111: This applies to the presence of the name of a
112: function used within itself. The function name
113: means either call the function again, or assign
114: some value to the storage allocated to the
115: function's return value. */
116:
117: /* control stack codes - these are part of a state machine which handles
118: the nesting of blocks (i.e. what to do about the ELSE statement) */
119:
120: #define CTLDO 1
121: #define CTLIF 2
122: #define CTLELSE 3
123: #define CTLIFX 4
124:
125:
126: /* operators for both Fortran input and C output. They are common because
127: so many are shared between the trees */
128:
129: #define OPPLUS 1
130: #define OPMINUS 2
131: #define OPSTAR 3
132: #define OPSLASH 4
133: #define OPPOWER 5
134: #define OPNEG 6
135: #define OPOR 7
136: #define OPAND 8
137: #define OPEQV 9
138: #define OPNEQV 10
139: #define OPNOT 11
140: #define OPCONCAT 12
141: #define OPLT 13
142: #define OPEQ 14
143: #define OPGT 15
144: #define OPLE 16
145: #define OPNE 17
146: #define OPGE 18
147: #define OPCALL 19
148: #define OPCCALL 20
149: #define OPASSIGN 21
150: #define OPPLUSEQ 22
151: #define OPSTAREQ 23
152: #define OPCONV 24
153: #define OPLSHIFT 25
154: #define OPMOD 26
155: #define OPCOMMA 27
156: #define OPQUEST 28
157: #define OPCOLON 29
158: #define OPABS 30
159: #define OPMIN 31
160: #define OPMAX 32
161: #define OPADDR 33
162: #define OPCOMMA_ARG 34
163: #define OPBITOR 35
164: #define OPBITAND 36
165: #define OPBITXOR 37
166: #define OPBITNOT 38
167: #define OPRSHIFT 39
168: #define OPWHATSIN 40 /* dereferencing operator */
169: #define OPMINUSEQ 41 /* assignment operators */
170: #define OPSLASHEQ 42
171: #define OPMODEQ 43
172: #define OPLSHIFTEQ 44
173: #define OPRSHIFTEQ 45
174: #define OPBITANDEQ 46
175: #define OPBITXOREQ 47
176: #define OPBITOREQ 48
177: #define OPPREINC 49 /* Preincrement (++x) operator */
178: #define OPPREDEC 50 /* Predecrement (--x) operator */
179: #define OPDOT 51 /* structure field reference */
180: #define OPARROW 52 /* structure pointer field reference */
181: #define OPNEG1 53 /* simple negation under forcedouble */
182: #define OPDMIN 54 /* min(a,b) macro under forcedouble */
183: #define OPDMAX 55 /* max(a,b) macro under forcedouble */
184: #define OPASSIGNI 56 /* assignment for inquire stmt */
185: #define OPIDENTITY 57 /* for turning TADDR into TEXPR */
186: #define OPCHARCAST 58 /* for casting to char * (in I/O stmts) */
187: #define OPDABS 59 /* abs macro under forcedouble */
188: #define OPMIN2 60 /* min(a,b) macro */
189: #define OPMAX2 61 /* max(a,b) macro */
190:
191: /* label type codes -- used with the ASSIGN statement */
192:
193: #define LABUNKNOWN 0
194: #define LABEXEC 1
195: #define LABFORMAT 2
196: #define LABOTHER 3
197:
198:
199: /* INTRINSIC function codes*/
200:
201: #define INTREND 0
202: #define INTRCONV 1
203: #define INTRMIN 2
204: #define INTRMAX 3
205: #define INTRGEN 4 /* General intrinsic, e.g. cos v. dcos, zcos, ccos */
206: #define INTRSPEC 5
207: #define INTRBOOL 6
208: #define INTRCNST 7 /* constants, e.g. bigint(1.0) v. bigint (1d0) */
209:
210:
211: /* I/O statement codes - these all form Integer Constants, and are always
212: reevaluated */
213:
214: #define IOSTDIN ICON(5)
215: #define IOSTDOUT ICON(6)
216: #define IOSTDERR ICON(0)
217:
218: #define IOSBAD (-1)
219: #define IOSPOSITIONAL 0
220: #define IOSUNIT 1
221: #define IOSFMT 2
222:
223: #define IOINQUIRE 1
224: #define IOOPEN 2
225: #define IOCLOSE 3
226: #define IOREWIND 4
227: #define IOBACKSPACE 5
228: #define IOENDFILE 6
229: #define IOREAD 7
230: #define IOWRITE 8
231:
232:
233: /* User name tags -- these identify the form of the original identifier
234: stored in a struct Addrblock structure (in the user field). */
235:
236: #define UNAM_UNKNOWN 0 /* Not specified */
237: #define UNAM_NAME 1 /* Local symbol, store in the hash table */
238: #define UNAM_IDENT 2 /* Character string not stored elsewhere */
239: #define UNAM_EXTERN 3 /* External reference; check symbol table
240: using memno as index */
241: #define UNAM_CONST 4 /* Constant value */
242: #define UNAM_CHARP 5 /* pointer to string */
243: #define UNAM_REF 6 /* subscript reference with -s */
244:
245:
246: #define IDENT_LEN 31 /* Maximum length user.ident */
247:
248: /* type masks - TYLOGICAL defined in ftypes */
249:
250: #define MSKLOGICAL M(TYLOGICAL)|M(TYLOGICAL1)|M(TYLOGICAL2)
251: #define MSKADDR M(TYADDR)
252: #define MSKCHAR M(TYCHAR)
253: #ifdef TYQUAD
254: #define MSKINT M(TYINT1)|M(TYSHORT)|M(TYLONG)|M(TYQUAD)
255: #else
256: #define MSKINT M(TYINT1)|M(TYSHORT)|M(TYLONG)
257: #endif
258: #define MSKREAL M(TYREAL)|M(TYDREAL) /* DREAL means Double Real */
259: #define MSKCOMPLEX M(TYCOMPLEX)|M(TYDCOMPLEX)
260: #define MSKSTATIC (M(STGINIT)|M(STGBSS)|M(STGCOMMON)|M(STGEQUIV)|M(STGCONST))
261:
262: /* miscellaneous macros */
263:
264: /* ONEOF (x, y) -- x is the number of one of the OR'ed masks in y (i.e., x is
265: the log of one of the OR'ed masks in y) */
266:
267: #define ONEOF(x,y) (M(x) & (y))
268: #define ISCOMPLEX(z) ONEOF(z, MSKCOMPLEX)
269: #define ISREAL(z) ONEOF(z, MSKREAL)
270: #define ISNUMERIC(z) ONEOF(z, MSKINT|MSKREAL|MSKCOMPLEX)
271: #define ISICON(z) (z->tag==TCONST && ISINT(z->constblock.vtype))
272: #define ISLOGICAL(z) ONEOF(z, MSKLOGICAL)
273:
274: /* ISCHAR assumes that z has some kind of structure, i.e. is not null */
275:
276: #define ISCHAR(z) (z->headblock.vtype==TYCHAR)
277: #define ISINT(z) ONEOF(z, MSKINT) /* z is a tag, i.e. a mask number */
278: #define ISCONST(z) (z->tag==TCONST)
279: #define ISERROR(z) (z->tag==TERROR)
280: #define ISPLUSOP(z) (z->tag==TEXPR && z->exprblock.opcode==OPPLUS)
281: #define ISSTAROP(z) (z->tag==TEXPR && z->exprblock.opcode==OPSTAR)
282: #define ISONE(z) (ISICON(z) && z->constblock.Const.ci==1)
283: #define INT(z) ONEOF(z, MSKINT|MSKCHAR) /* has INT storage in real life */
284: #define ICON(z) mkintcon( (ftnint)(z) )
285:
286: /* NO66 -- F77 feature is being used
287: NOEXT -- F77 extension is being used */
288:
289: #define NO66(s) if(no66flag) err66(s)
290: #define NOEXT(s) if(noextflag) errext(s)
291:
292: /* round a up to the nearest multiple of b:
293:
294: a = b * floor ( (a + (b - 1)) / b )*/
295:
296: #define roundup(a,b) ( b * ( (a+b-1)/b) )
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.