BSD 3 development
[unix-history] / usr / src / cmd / mip / mfile1
CommitLineData
5a7128e9
BJ
1
2# include "macdefs"
3# include "manifest"
4
5/* storage classes */
6# define SNULL 0
7# define AUTO 1
8# define EXTERN 2
9# define STATIC 3
10# define REGISTER 4
11# define EXTDEF 5
12# define LABEL 6
13# define ULABEL 7
14# define MOS 8
15# define PARAM 9
16# define STNAME 10
17# define MOU 11
18# define UNAME 12
19# define TYPEDEF 13
20# define FORTRAN 14
21# define ENAME 15
22# define MOE 16
23# define UFORTRAN 17
24# define USTATIC 18
25 /* field size is ORed in */
26# define FIELD 0100
27# define FLDSIZ 077
28extern char *scnames();
29
30/* location counters */
31# define PROG 0
32# define DATA 1
33# define ADATA 2
34# define STRNG 3
35# define ISTRNG 4
36# define STAB 5
37
38
39/* symbol table flags */
40# define SMOS 01
41# define SHIDDEN 02
42# define SHIDES 04
43# define SSET 010
44# define SREF 020
45
46# define FIXDEF(p) outstab(p)
47# ifndef FIXDEF
48# define FIXDEF(p)
49#endif
50
51 /* alignment of initialized quantities */
52# ifndef AL_INIT
53# define AL_INIT ALINT
54# endif
55
56struct symtab {
57 char sname[NCHNAM];
58 TWORD stype; /* type word */
59
60 char sclass; /* storage class */
61 char slevel; /* scope level */
62 char sflags; /* flags for set, use, hidden, mos, etc. */
63 int offset; /* offset or value */
64 short dimoff; /* offset into the dimension table */
65 short sizoff; /* offset into the size table */
66 short suse; /* line number of last use of the variable */
67 };
68
69
70# ifdef ONEPASS
71/* NOPREF must be defined for use in first pass tree machine */
72# define NOPREF 020000 /* no preference for register assignment */
73#else
74
75union ndu {
76 struct {
77 int op;
78 TWORD type;
79 int cdim, csiz;
80 NODE *left;
81 NODE * right;
82 };
83
84 struct {
85 /* this structure is the same as above,
86 but is used when a value, rather than
87 address, is kept in +left */
88 int op;
89 TWORD type;
90 int cdim, csiz;
91 CONSZ lval;
92 int rval;
93 };
94
95 struct {
96 /* this structure is used when a floating point constant
97 is being computed */
98 int op;
99 TWORD type;
100 int cdim, csiz;
101 double dval;
102 };
103
104 };
105# endif
106
107struct sw {
108 CONSZ sval;
109 int slab;
110 };
111
112extern struct sw swtab[];
113extern struct sw *swp;
114extern int swx;
115
116extern int ftnno;
117extern int blevel;
118extern int instruct, stwart;
119
120extern int lineno, nerrors;
121typedef union {
122 int intval;
123 NODE * nodep;
124 } YYSTYPE;
125extern YYSTYPE yylval;
126
127extern CONSZ lastcon;
128extern double dcon;
129
130extern char ftitle[];
131extern char ititle[];
132extern struct symtab stab[];
133extern int curftn;
134extern int curclass;
135extern int curdim;
136extern int dimtab[];
137extern int paramstk[];
138extern int paramno;
139extern int autooff, argoff, strucoff;
140extern int regvar;
141extern int minrvar;
142extern int brkflag;
143extern char yytext[];
144
145extern int strflg;
146
147extern OFFSZ inoff;
148
149extern int reached;
150
151/* tunnel to buildtree for name id's */
152
153extern int idname;
154
155extern NODE node[];
156extern NODE *lastfree;
157
158extern int cflag, hflag, pflag;
159
160/* various labels */
161extern int brklab;
162extern int contlab;
163extern int flostat;
164extern int retlab;
165extern int retstat;
166extern int asavbc[], *psavbc;
167
168/* flags used in structures/unions */
169
170# define SEENAME 01
171# define INSTRUCT 02
172# define INUNION 04
173# define FUNNYNAME 010
174
175/* flags used in the (elementary) flow analysis ... */
176
177# define FBRK 02
178# define FCONT 04
179# define FDEF 010
180# define FLOOP 020
181
182/* flags used for return status */
183
184# define RETVAL 1
185# define NRETVAL 2
186
187/* used to mark a constant with no name field */
188
189# define NONAME 040000
190
191 /* mark an offset which is undefined */
192
193# define NOOFFSET (-10201)
194
195/* declarations of various functions */
196
197extern NODE
198 *buildtree(),
199 *bdty(),
200 *mkty(),
201 *rstruct(),
202 *dclstruct(),
203 *getstr(),
204 *tymerge(),
205 *stref(),
206 *offcon(),
207 *bcon(),
208 *bpsize(),
209 *convert(),
210 *pconvert(),
211 *oconvert(),
212 *ptmatch(),
213 *tymatch(),
214 *makety(),
215 *block(),
216 *doszof(),
217 *talloc(),
218 *optim(),
219 *strargs(),
220 *clocal();
221
222OFFSZ tsize(),
223 psize();
224
225TWORD types();
226
227
228double atof();
229
230char *exname(), *exdcon();
231
232# define checkst(x)
233
234# ifndef CHARCAST
235/* to make character constants into character connstants */
236/* this is a macro to defend against cross-compilers, etc. */
237# define CHARCAST(x) (char)(x)
238# endif
239