raise constants for ADA compiler
[unix-history] / usr / src / old / pcc / mip / mfile1
CommitLineData
81a05aab 1/* @(#)mfile1 4.2 (Berkeley) 83/04/04 */
53f86642
KM
2
3# include "macdefs"
4# include "manifest"
5
6/* storage classes */
7# define SNULL 0
8# define AUTO 1
9# define EXTERN 2
10# define STATIC 3
11# define REGISTER 4
12# define EXTDEF 5
13# define LABEL 6
14# define ULABEL 7
15# define MOS 8
16# define PARAM 9
17# define STNAME 10
18# define MOU 11
19# define UNAME 12
20# define TYPEDEF 13
21# define FORTRAN 14
22# define ENAME 15
23# define MOE 16
24# define UFORTRAN 17
25# define USTATIC 18
26 /* field size is ORed in */
27# define FIELD 0100
28# define FLDSIZ 077
29# ifndef BUG1
30extern char *scnames();
31# endif
32
33/* location counters */
34# define PROG 0
35# define DATA 1
36# define ADATA 2
37# define STRNG 3
38# define ISTRNG 4
39# define STAB 5
40
41
42/* symbol table flags */
43# define SMOS 01
44# define SHIDDEN 02
45# define SHIDES 04
46# define SSET 010
47# define SREF 020
48# define SNONUNIQ 040
49# define STAG 0100
50
51# ifndef FIXDEF
52# define FIXDEF(p)
53#endif
54# ifndef FIXARG
55# define FIXARG(p)
56# endif
57# ifndef FIXSTRUCT
58# define FIXSTRUCT(a,b)
59# endif
60
61 /* alignment of initialized quantities */
62# ifndef AL_INIT
63# define AL_INIT ALINT
64# endif
65
66struct symtab {
67#ifndef FLEXNAMES
68 char sname[NCHNAM];
69#else
70 char *sname;
71#endif
72 TWORD stype; /* type word */
73
74 char sclass; /* storage class */
75 char slevel; /* scope level */
76 char sflags; /* flags for set, use, hidden, mos, etc. */
77 int offset; /* offset or value */
78 short dimoff; /* offset into the dimension table */
79 short sizoff; /* offset into the size table */
80 short suse; /* line number of last use of the variable */
81 };
82
83
84# ifdef ONEPASS
85/* NOPREF must be defined for use in first pass tree machine */
86# define NOPREF 020000 /* no preference for register assignment */
87#else
88
89union ndu {
90 struct {
91 int op;
92 TWORD type;
93 int cdim, csiz;
94 }fn; /* front node */
95 struct {
96 int op;
97 TWORD type;
98 int cdim, csiz;
99 NODE *left;
100 NODE * right;
101 }in; /* interior node */
102
103 struct {
104 /* this structure is the same as above,
105 but is used when a value, rather than
106 address, is kept in +left */
107 int op;
108 TWORD type;
109 int cdim, csiz;
110 CONSZ lval;
111 int rval;
112 }tn; /* terminal node */
113
114 struct {
115 /* this structure is used when a floating point constant
116 is being computed */
117 int op;
118 TWORD type;
119 int cdim, csiz;
120 double dval;
121 }fpn; /* floating point node */
122
123 };
124# endif
125
126struct sw {
127 CONSZ sval;
128 int slab;
129 };
130
131extern struct sw swtab[];
132extern struct sw *swp;
133extern int swx;
134
135extern int ftnno;
136extern int blevel;
137extern int instruct, stwart;
138
139extern int lineno, nerrors;
140typedef union {
141 int intval;
142 NODE * nodep;
143 } YYSTYPE;
144extern YYSTYPE yylval;
145
146extern CONSZ lastcon;
147extern double dcon;
148
149extern char ftitle[];
150extern char ititle[];
151extern struct symtab stab[];
152extern int curftn;
153extern int curclass;
154extern int curdim;
155extern int dimtab[];
156extern int paramstk[];
157extern int paramno;
158extern int autooff, argoff, strucoff;
159extern int regvar;
160extern int minrvar;
161extern int brkflag;
162extern char yytext[];
163
164extern int strflg;
165
166extern OFFSZ inoff;
167
168extern int reached;
169
170/* tunnel to buildtree for name id's */
171
172extern int idname;
173
174extern NODE node[];
175extern NODE *lastfree;
176
177extern int cflag, hflag, pflag;
178
179/* various labels */
180extern int brklab;
181extern int contlab;
182extern int flostat;
183extern int retlab;
184extern int retstat;
185extern int asavbc[], *psavbc;
186
187/* flags used in structures/unions */
188
189# define SEENAME 01
190# define INSTRUCT 02
191# define INUNION 04
192# define FUNNYNAME 010
193# define TAGNAME 020
194
195/* flags used in the (elementary) flow analysis ... */
196
197# define FBRK 02
198# define FCONT 04
199# define FDEF 010
200# define FLOOP 020
201
202/* flags used for return status */
203
204# define RETVAL 1
205# define NRETVAL 2
206
207/* used to mark a constant with no name field */
208
209# define NONAME 040000
210
211 /* mark an offset which is undefined */
212
213# define NOOFFSET (-10201)
214
215/* declarations of various functions */
216
217extern NODE
218 *buildtree(),
219 *bdty(),
220 *mkty(),
221 *rstruct(),
222 *dclstruct(),
223 *getstr(),
224 *tymerge(),
225 *stref(),
226 *offcon(),
227 *bcon(),
228 *bpsize(),
229 *convert(),
230 *pconvert(),
231 *oconvert(),
232 *ptmatch(),
233 *tymatch(),
234 *makety(),
235 *block(),
236 *doszof(),
237 *talloc(),
238 *optim(),
239 *strargs(),
240 *clocal();
241
242OFFSZ tsize(),
243 psize();
244
245TWORD types();
246
247
248double atof();
249
250char *exname(), *exdcon();
251
252# define checkst(x)
253
254# ifndef CHARCAST
255/* to make character constants into character connstants */
256/* this is a macro to defend against cross-compilers, etc. */
257# define CHARCAST(x) (char)(x)
258# endif
259
260# define BCSZ 100 /* size of the table to save break and continue labels */
261# define SYMTSZ 1300 /* size of the symbol table (was 500) */
262# define DIMTABSZ 2000 /* size of the dimension/size table (was 800) */
263# define PARAMSZ 150 /* size of the parameter stack */
264# define SWITSZ 500 /* size of switch table */
265/* special interfaces for yacc alone */
266/* These serve as abbreviations of 2 or more ops:
267 ASOP =, = ops
268 RELOP LE,LT,GE,GT
269 EQUOP EQ,NE
270 DIVOP DIV,MOD
271 SHIFTOP LS,RS
272 ICOP ICR,DECR
273 UNOP NOT,COMPL
274 STROP DOT,STREF
275
276 */
277# define ASOP 25
278# define RELOP 26
279# define EQUOP 27
280# define DIVOP 28
281# define SHIFTOP 29
282# define INCOP 30
283# define UNOP 31
284# define STROP 32
285
286# define LP 50
287# define RP 51
288# define LC 52
289# define RC 53