|
|
1.1 root 1: /* @(#) mfile1.h: 1.1 12/22/83 */
2:
3:
4: # include "macdefs.h"
5: # include "manifest.h"
6:
7: /* storage classes */
8: # define SNULL 0
9: # define AUTO 1
10: # define EXTERN 2
11: # define STATIC 3
12: # define REGISTER 4
13: # define EXTDEF 5
14: # define LABEL 6
15: # define ULABEL 7
16: # define MOS 8
17: # define PARAM 9
18: # define STNAME 10
19: # define MOU 11
20: # define UNAME 12
21: # define TYPEDEF 13
22: # define FORTRAN 14
23: # define ENAME 15
24: # define MOE 16
25: # define UFORTRAN 17
26: # define USTATIC 18
27: /* field size is ORed in */
28: # define FIELD 0100
29: # define FLDSIZ 077
30: # ifndef NODBG
31: extern char *scnames();
32: # endif
33:
34: /* location counters */
35: # define PROG 0
36: # define ADATA 1
37: # define DATA 2
38: # define ISTRNG 3
39: # define STRNG 4
40:
41: /* symbol table flags */
42: # define SMOS 01
43: # define SHIDDEN 02
44: # define SHIDES 04
45: # define SSET 010
46: # define SREF 020
47: # define SNONUNIQ 040
48: # define STAG 0100
49: # define SBSS 0200
50:
51: typedef long OFFSZ;
52:
53: struct symtab {
54: char *sname;
55: TWORD stype; /* type word */
56:
57: char sclass; /* storage class */
58: char slevel; /* scope level */
59: char sflags; /* flags for set, use, hidden, mos, etc. */
60: int offset; /* offset or value */
61: short dimoff; /* offset into the dimension table */
62: short sizoff; /* offset into the size table */
63: short suse; /* line number of last use of the variable */
64: struct symtab *scopelink; /* chain of symbols at same level */
65: };
66:
67:
68: struct sw {
69: CONSZ sval;
70: int slab;
71: };
72:
73: extern struct sw swtab[];
74: extern struct sw *swp;
75: extern int swx;
76:
77: extern int ftnno;
78: extern int blevel;
79: extern int instruct, stwart;
80:
81: extern int lineno, slineno, nerrors;
82: typedef struct {
83: union {
84: int u_intval;
85: NODE *u_nodep;
86: } YY_un;
87: int lineno;
88: } YYSTYPE;
89: #define intval YY_un.u_intval
90: #define nodep YY_un.u_nodep
91: extern YYSTYPE yylval;
92:
93: extern CONSZ lastcon;
94: extern CONSZ ccast();
95: extern double dcon;
96:
97: extern char ftitle[];
98: extern struct symtab stab[];
99: extern int curftn;
100: extern int strftn;
101: extern char *locnames[];
102: extern int curloc;
103: extern int curclass;
104: extern int curdim;
105: extern int *dimtab;
106: extern int paramstk[];
107: extern int paramno;
108: extern int argstk[];
109: extern int argsoff[];
110: extern TWORD argty[];
111: extern int argno;
112: extern int autooff, argoff, strucoff;
113: extern int regvar;
114: extern int nextrvar;
115: extern int brkflag;
116: extern char yytext[];
117:
118: extern int strflg;
119:
120: extern OFFSZ inoff;
121:
122: extern int reached;
123:
124: /* tunnel to buildtree for name id's */
125:
126: extern int idname;
127:
128: extern NODE node[];
129: extern NODE *lastfree;
130:
131: extern int cflag, hflag, pflag;
132:
133: /* various labels */
134: extern int brklab;
135: extern int contlab;
136: #ifdef M32B
137: extern int swregno;
138: #endif
139: extern int flostat;
140: extern int retlab;
141: extern int retstat;
142: extern int asavbc[], *psavbc;
143:
144: /* flags used in structures/unions */
145:
146: # define SEENAME 01
147: # define INSTRUCT 02
148: # define INUNION 04
149: # define FUNNYNAME 010
150: # define TAGNAME 020
151:
152: /* flags used in the (elementary) flow analysis ... */
153:
154: # define FBRK 02
155: # define FCONT 04
156: # define FDEF 010
157: # define FLOOP 020
158:
159: /*
160: * These defines control "while" and "for" loop code generation.
161: * wloop_level and floop_level each must be set to one of these values.
162: */
163: #define LL_TOP 0 /* test at loop top */
164: #define LL_BOT 1 /* test at loop bottom */
165: #define LL_DUP 2 /* duplicate loop test at top and bottom */
166:
167: #ifdef M32B
168: /* for register allocation optimization */
169: extern int fordepth;
170: extern int whdepth;
171: extern int brdepth;
172: # ifdef IMPREGAL
173: extern void rainit(), radbl(), raname(), raua(), raftn();
174: # endif
175: #endif
176:
177: /* flags used for return status */
178:
179: # define RETVAL 1
180: # define NRETVAL 2
181:
182: /* used to mark a constant with no name field */
183:
184: # define NONAME 040000
185:
186: /* mark an offset which is undefined */
187:
188: # define NOOFFSET (-10201)
189:
190: /* declarations of various functions */
191:
192: extern NODE
193: *aadjust(),
194: *bcon(),
195: *bdty(),
196: *block(),
197: *bpsize(),
198: *buildtree(),
199: #ifdef M32B
200: *myand(),
201: *setswreg(),
202: #endif
203: *clocal(),
204: *conval(),
205: *convert(),
206: *dclstruct(),
207: *doszof(),
208: *getstr(),
209: *makety(),
210: *mkty(),
211: *oconvert(),
212: *offcon(),
213: *optim(),
214: *pconvert(),
215: *ptmatch(),
216: *pvconvert(),
217: *rstruct(),
218: *sconvert(),
219: *strargs(),
220: *stref(),
221: *talloc(),
222: *tymatch(),
223: *tymerge(),
224: *unconvert(),
225: *xicolon();
226:
227: OFFSZ tsize(),
228: psize();
229:
230: TWORD types(),
231: ctype();
232:
233: char *exname(), *exdcon();
234:
235: # define checkst(x)
236:
237: /* type that is equivalent to pointers in size */
238: # ifndef PTRTYPE
239: # define PTRTYPE INT
240: # endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.