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