BSD 4 release
[unix-history] / usr / src / cmd / f77 / defs
CommitLineData
853979d9
BJ
1#include <stdio.h>
2
3#ifdef unix
4# include <ctype.h>
5#endif
6
7#include "ftypes"
8#include "defines"
9#include "machdefs"
10
11#define VL 6
12
13#define MAXDIM 20
14#define MAXINCLUDES 10
15#define MAXLITERALS 20
16#define MAXCTL 20
17#define MAXHASH 401
18#define MAXSTNO 201
19#define MAXEXT 200
20#define MAXEQUIV 150
21#define MAXLABLIST 125
22
23typedef union Expression *expptr;
24typedef union Taggedblock *tagptr;
25typedef struct Chain *chainp;
26typedef struct Addrblock *Addrp;
27typedef struct Constblock *Constp;
28typedef struct Exprblock *Exprp;
29typedef struct Nameblock *Namep;
30
31extern FILEP infile;
32extern FILEP diagfile;
33extern FILEP textfile;
34extern FILEP asmfile;
35extern FILEP initfile;
36extern long int headoffset;
37
38extern char token [ ];
39extern int toklen;
40extern int lineno;
41extern char *infname;
42extern int needkwd;
43extern struct Labelblock *thislabel;
44
45extern int maxctl;
46extern int maxequiv;
47extern int maxstno;
48extern int maxhash;
49extern int maxext;
50
51extern flag profileflag;
52extern flag optimflag;
53extern flag nowarnflag;
54extern flag ftn66flag;
55extern flag no66flag;
56extern flag noextflag;
57extern flag shiftcase;
58extern flag undeftype;
59extern flag shortsubs;
60extern flag onetripflag;
61extern flag checksubs;
62extern flag debugflag;
63extern int nerr;
64extern int nwarn;
65extern int ndata;
66
67extern int parstate;
68extern flag headerdone;
69extern int blklevel;
70extern flag saveall;
71extern flag substars;
72extern int impltype[ ];
73extern int implleng[ ];
74extern int implstg[ ];
75
76extern int tyint;
77extern int tylogical;
78extern ftnint typesize[];
79extern int typealign[];
80extern int procno;
81extern int proctype;
82extern char * procname;
83extern int rtvlabel[ ];
84extern int fudgelabel; /* to confuse the pdp11 optimizer */
85extern Addrp typeaddr;
86extern Addrp retslot;
87extern int cxslot;
88extern int chslot;
89extern int chlgslot;
90extern int procclass;
91extern ftnint procleng;
92extern int nentry;
93extern flag multitype;
94extern int blklevel;
95extern int lastlabno;
96extern int lastvarno;
97extern int lastargslot;
98extern int argloc;
99extern ftnint autoleng;
100extern ftnint bssleng;
101extern int retlabel;
102extern int ret0label;
103extern int dorange;
104extern int regnum[ ];
105extern Namep regnamep[ ];
106extern int maxregvar;
107extern int highregvar;
108extern int nregvar;
109
110extern chainp templist;
111extern int maxdim;
112extern chainp holdtemps;
113extern struct Entrypoint *entries;
114extern struct Rplblock *rpllist;
115extern struct Chain *curdtp;
116extern ftnint curdtelt;
117extern flag toomanyinit;
118
119extern flag inioctl;
120extern int iostmt;
121extern Addrp ioblkp;
122extern int nioctl;
123extern int nequiv;
124extern int eqvstart; /* offset to eqv number to guarantee uniqueness */
125extern int nintnames;
126
127#ifdef SDB
128extern int dbglabel;
129extern flag sdbflag;
130#endif
131\f
132struct Chain
133 {
134 chainp nextp;
135 tagptr datap;
136 };
137
138extern chainp chains;
139
140struct Headblock
141 {
142 field tag;
143 field vtype;
144 field vclass;
145 field vstg;
146 expptr vleng;
147 } ;
148
149struct Ctlframe
150 {
151 unsigned ctltype:8;
152 unsigned dostepsign:8;
153 int ctlabels[4];
154 int dolabel;
155 Namep donamep;
156 expptr domax;
157 expptr dostep;
158 };
159#define endlabel ctlabels[0]
160#define elselabel ctlabels[1]
161#define dobodylabel ctlabels[1]
162#define doposlabel ctlabels[2]
163#define doneglabel ctlabels[3]
164extern struct Ctlframe *ctls;
165extern struct Ctlframe *ctlstack;
166extern struct Ctlframe *lastctl;
167
168struct Extsym
169 {
170 char extname[XL];
171 field extstg;
172 unsigned extsave:1;
173 unsigned extinit:1;
174 chainp extp;
175 ftnint extleng;
176 ftnint maxleng;
177 };
178
179extern struct Extsym *extsymtab;
180extern struct Extsym *nextext;
181extern struct Extsym *lastext;
182
183struct Labelblock
184 {
185 int labelno;
186 unsigned blklevel:8;
187 unsigned labused:1;
188 unsigned labinacc:1;
189 unsigned labdefined:1;
190 unsigned labtype:2;
191 ftnint stateno;
192 };
193
194extern struct Labelblock *labeltab;
195extern struct Labelblock *labtabend;
196extern struct Labelblock *highlabtab;
197
198struct Entrypoint
199 {
200 struct Entrypoint *entnextp;
201 struct Extsym *entryname;
202 chainp arglist;
203 int entrylabel;
204 int typelabel;
205 Namep enamep;
206 };
207
208struct Primblock
209 {
210 field tag;
211 field vtype;
212 Namep namep;
213 struct Listblock *argsp;
214 expptr fcharp;
215 expptr lcharp;
216 };
217
218
219struct Hashentry
220 {
221 int hashval;
222 Namep varp;
223 };
224extern struct Hashentry *hashtab;
225extern struct Hashentry *lasthash;
226
227struct Intrpacked /* bits for intrinsic function description */
228 {
229 unsigned f1:3;
230 unsigned f2:4;
231 unsigned f3:7;
232 };
233
234struct Nameblock
235 {
236 field tag;
237 field vtype;
238 field vclass;
239 field vstg;
240 expptr vleng;
241 char varname[VL];
242 unsigned vdovar:1;
243 unsigned vdcldone:1;
244 unsigned vadjdim:1;
245 unsigned vsave:1;
246 unsigned vprocclass:3;
247 unsigned vregno:4;
248 union {
249 int varno;
250 struct Intrpacked intrdesc; /* bits for intrinsic function*/
251 } vardesc;
252 struct Dimblock *vdim;
253 ftnint voffset;
254 union {
255 chainp namelist; /* points to chain of names in */
256 chainp vstfdesc; /* points to (formals, expr) pair */
257 } varxptr;
258 };
259
260
261struct Paramblock
262 {
263 field tag;
264 field vtype;
265 field vclass;
266 field vstg;
267 expptr vleng;
268 char varname[VL];
269 expptr paramval;
270 } ;
271
272
273struct Exprblock
274 {
275 field tag;
276 field vtype;
277 field vclass;
278 field vstg;
279 expptr vleng;
280 unsigned opcode:6;
281 expptr leftp;
282 expptr rightp;
283 };
284
285
286union Constant
287 {
288 char *ccp;
289 ftnint ci;
290 double cd[2];
291 };
292
293struct Constblock
294 {
295 field tag;
296 field vtype;
297 field vclass;
298 field vstg;
299 expptr vleng;
300 union Constant const;
301 };
302
303
304struct Listblock
305 {
306 field tag;
307 field vtype;
308 chainp listp;
309 };
310
311
312
313struct Addrblock
314 {
315 field tag;
316 field vtype;
317 field vclass;
318 field vstg;
319 expptr vleng;
320 int memno;
321 expptr memoffset;
322 unsigned istemp:1;
323 unsigned ntempelt:10;
324 ftnint varleng;
325 };
326
327
328
329struct Errorblock
330 {
331 field tag;
332 field vtype;
333 };
334
335
336union Expression
337 {
338 field tag;
339 struct Headblock headblock;
340 struct Exprblock exprblock;
341 struct Addrblock addrblock;
342 struct Constblock constblock;
343 struct Errorblock errorblock;
344 struct Listblock listblock;
345 struct Primblock primblock;
346 } ;
347
348
349
350struct Dimblock
351 {
352 int ndim;
353 expptr nelt;
354 expptr baseoffset;
355 expptr basexpr;
356 struct
357 {
358 expptr dimsize;
359 expptr dimexpr;
360 } dims[1];
361 };
362
363
364struct Impldoblock
365 {
366 field tag;
367 unsigned isactive:1;
368 unsigned isbusy:1;
369 Namep varnp;
370 Constp varvp;
371 chainp impdospec;
372 expptr implb;
373 expptr impub;
374 expptr impstep;
375 ftnint impdiff;
376 ftnint implim;
377 struct Chain *datalist;
378 };
379
380
381struct Rplblock /* name replacement block */
382 {
383 struct Rplblock *rplnextp;
384 Namep rplnp;
385 expptr rplvp;
386 expptr rplxp;
387 int rpltag;
388 };
389
390
391
392struct Equivblock
393 {
394 struct Eqvchain *equivs;
395 flag eqvinit;
396 long int eqvtop;
397 long int eqvbottom;
398 } ;
399#define eqvleng eqvtop
400
401extern struct Equivblock *eqvclass;
402
403
404struct Eqvchain
405 {
406 struct Eqvchain *eqvnextp;
407 union
408 {
409 struct Primblock *eqvlhs;
410 Namep eqvname;
411 } eqvitem;
412 long int eqvoffset;
413 } ;
414
415
416union Taggedblock
417 {
418 field tag;
419 struct Headblock headblock;
420 struct Nameblock nameblock;
421 struct Paramblock paramblock;
422 struct Exprblock exprblock;
423 struct Constblock constblock;
424 struct Listblock listblock;
425 struct Addrblock addrblock;
426 struct Errorblock errorblock;
427 struct Primblock primblock;
428 struct Impldoblock impldoblock;
429 } ;
430
431
432
433
434struct Literal
435 {
436 short littype;
437 short litnum;
438 union {
439 ftnint litival;
440 double litdval;
441 struct {
442 char litclen; /* small integer */
443 char litcstr[XL];
444 } litcval;
445 } litval;
446 };
447
448extern struct Literal litpool[ ];
449extern int nliterals;
450
451
452
453/* popular functions with non integer return values */
454
455
456int *ckalloc();
457char *varstr(), *nounder(), *varunder();
458char *copyn(), *copys();
459chainp hookup(), mkchain();
460ftnint convci();
461char *convic();
462char *setdoto();
463double convcd();
464Namep mkname();
465struct Labelblock *mklabel(), *execlab();
466struct Extsym *mkext(), *newentry();
467expptr addrof(), call1(), call2(), call3(), call4();
468Addrp builtin(), mktemp(), mktmpn(), autovar();
469Addrp mkplace(), mkaddr(), putconst(), memversion();
470expptr mkprim(), mklhs(), mkexpr(), mkconv(), mkfunct(), fixexpr(), fixtype();
471expptr errnode(), mkintcon();
472tagptr cpexpr();
473ftnint lmin(), lmax(), iarrlen();