|
|
1.1 root 1: /* pass1.h 4.2 85/08/22 */
2:
3: #ifndef _PASS1_
4: #define _PASS1_
5:
6: #include "macdefs.h"
7: #include "manifest.h"
8:
9: /*
10: * Symbol table definition.
11: *
12: * Colliding entries are moved down with a standard
13: * probe (no quadratic rehash here) and moved back when
14: * entries are cleared.
15: */
16: struct symtab {
17: #ifndef FLEXNAMES
18: char sname[NCHNAM];
19: #else
20: char *sname;
21: #endif
22: struct symtab *snext; /* link to other symbols in the same scope */
23: TWORD stype; /* type word */
24: char sclass; /* storage class */
25: char slevel; /* scope level */
26: char sflags; /* flags, see below */
27: int offset; /* offset or value */
28: short dimoff; /* offset into the dimension table */
29: short sizoff; /* offset into the size table */
30: int suse; /* line number of last use of the variable */
31: };
32:
33: /*
34: * Storage classes
35: */
36: #define SNULL 0 /* initial value */
37: #define AUTO 1 /* automatic (on stack) */
38: #define EXTERN 2 /* external reference */
39: #define STATIC 3 /* static scope */
40: #define REGISTER 4 /* register requested */
41: #define EXTDEF 5 /* external definition */
42: #define LABEL 6 /* label definition */
43: #define ULABEL 7 /* undefined label reference */
44: #define MOS 8 /* member of structure */
45: #define PARAM 9 /* parameter */
46: #define STNAME 10 /* structure name */
47: #define MOU 11 /* member of union */
48: #define UNAME 12 /* union name */
49: #define TYPEDEF 13 /* typedef name */
50: #define FORTRAN 14 /* fortran function */
51: #define ENAME 15 /* enumeration name */
52: #define MOE 16 /* member of enumeration */
53: #define UFORTRAN 17 /* undefined fortran reference */
54: #define USTATIC 18 /* undefined static reference */
55:
56: /* field size is ORed in */
57: #define FIELD 0100
58: #define FLDSIZ 077
59: #ifndef BUG1
60: extern char *scnames();
61: #endif
62:
63: /*
64: * Symbol table flags
65: */
66: #define SMOS 01 /* member of structure */
67: #define SHIDDEN 02 /* hidden in current scope */
68: #define SHIDES 04 /* hides symbol in outer scope */
69: #define SSET 010 /* symbol assigned to */
70: #define SREF 020 /* symbol referenced */
71: #define SNONUNIQ 040 /* non-unique structure member */
72: #define STAG 0100 /* structure tag name */
73:
74: /*
75: * Location counters
76: */
77: #define PROG 0 /* program segment */
78: #define DATA 1 /* data segment */
79: #define ADATA 2 /* array data segment */
80: #define STRNG 3 /* string data segment */
81: #define ISTRNG 4 /* initialized string segment */
82: #define STAB 5 /* symbol table segment */
83:
84:
85: #ifndef ONEPASS
86: #include "ndu.h"
87: #endif
88:
89:
90: #ifndef FIXDEF
91: #define FIXDEF(p)
92: #endif
93: #ifndef FIXARG
94: #define FIXARG(p)
95: #endif
96: #ifndef FIXSTRUCT
97: #define FIXSTRUCT(a,b)
98: #endif
99:
100: /* alignment of initialized quantities */
101: #ifndef AL_INIT
102: #define AL_INIT ALINT
103: #endif
104:
105: /*
106: * External definitions
107: */
108: struct sw { /* switch table */
109: CONSZ sval; /* case value */
110: int slab; /* associated label */
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:
122: extern CONSZ lastcon;
123: extern float fcon;
124: extern double dcon;
125:
126: extern char ftitle[];
127: extern char ititle[];
128: extern struct symtab stab[];
129: extern int curftn;
130: extern int curclass;
131: extern int curdim;
132: extern int dimtab[];
133: extern int paramstk[];
134: extern int paramno;
135: extern int autooff, argoff, strucoff;
136: extern int regvar;
137: extern int minrvar;
138: extern int brkflag;
139: typedef union {
140: int intval;
141: NODE * nodep;
142: } YYSTYPE;
143: extern YYSTYPE yylval;
144: extern char yytext[];
145:
146: extern int strflg;
147:
148: extern OFFSZ inoff;
149:
150: extern int reached;
151:
152: /* tunnel to buildtree for name id's */
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: /* declarations of various functions */
169: extern NODE
170: *buildtree(),
171: *bdty(),
172: *mkty(),
173: *rstruct(),
174: *dclstruct(),
175: *getstr(),
176: *tymerge(),
177: *stref(),
178: *offcon(),
179: *bcon(),
180: *bpsize(),
181: *convert(),
182: *pconvert(),
183: *oconvert(),
184: *ptmatch(),
185: *tymatch(),
186: *makety(),
187: *block(),
188: *doszof(),
189: *talloc(),
190: *optim(),
191: *fixargs(),
192: *clocal();
193: OFFSZ tsize(),
194: psize();
195: TWORD types();
196: double atof();
197: char *exname(), *exdcon();
198:
199: #define checkst(x)
200:
201: #ifndef CHARCAST
202: /* to make character constants into character connstants */
203: /* this is a macro to defend against cross-compilers, etc. */
204: #define CHARCAST(x) (char)(x)
205: #endif
206: #endif
207:
208: /*
209: * Flags used in structures/unions
210: */
211: #define SEENAME 01
212: #define INSTRUCT 02
213: #define INUNION 04
214: #define FUNNYNAME 010
215: #define TAGNAME 020
216:
217: /*
218: * Flags used in the (elementary) flow analysis ...
219: */
220: #define FBRK 02
221: #define FCONT 04
222: #define FDEF 010
223: #define FLOOP 020
224:
225: /*
226: * Flags used for return status
227: */
228: #define RETVAL 1
229: #define NRETVAL 2
230:
231: #define NONAME 040000 /* marks constant w/o name field */
232: #define NOOFFSET (-10201) /* mark an offset which is undefined */
233:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.