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