|
|
1.1 root 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
28: extern 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:
56: struct 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:
75: union 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:
107: struct sw {
108: CONSZ sval;
109: int slab;
110: };
111:
112: extern struct sw swtab[];
113: extern struct sw *swp;
114: extern int swx;
115:
116: extern int ftnno;
117: extern int blevel;
118: extern int instruct, stwart;
119:
120: extern int lineno, nerrors;
121: typedef union {
122: int intval;
123: NODE * nodep;
124: } YYSTYPE;
125: extern YYSTYPE yylval;
126:
127: extern CONSZ lastcon;
128: extern double dcon;
129:
130: extern char ftitle[];
131: extern char ititle[];
132: extern struct symtab stab[];
133: extern int curftn;
134: extern int curclass;
135: extern int curdim;
136: extern int dimtab[];
137: extern int paramstk[];
138: extern int paramno;
139: extern int autooff, argoff, strucoff;
140: extern int regvar;
141: extern int minrvar;
142: extern int brkflag;
143: extern char yytext[];
144:
145: extern int strflg;
146:
147: extern OFFSZ inoff;
148:
149: extern int reached;
150:
151: /* tunnel to buildtree for name id's */
152:
153: extern int idname;
154:
155: extern NODE node[];
156: extern NODE *lastfree;
157:
158: extern int cflag, hflag, pflag;
159:
160: /* various labels */
161: extern int brklab;
162: extern int contlab;
163: extern int flostat;
164: extern int retlab;
165: extern int retstat;
166: extern 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:
197: extern 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:
222: OFFSZ tsize(),
223: psize();
224:
225: TWORD types();
226:
227:
228: double atof();
229:
230: char *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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.