|
|
1.1 root 1: /*
2: * n0/dope.c
3: * C compiler.
4: * Operator and type conversion
5: * information ("dope") tables.
6: */
7: #ifdef vax
8: #include "INC$LIB:cc0.h"
9: #else
10: #include "cc0.h"
11: #endif
12:
13: /*
14: * This table is indexed by operator number less MIOBASE
15: * to get the legal left and right operand rules.
16: */
17: short opdope[] = {
18:
19: 13 + FOLD+NSTR+NSTL, /* + */
20: 13 + FOLD+NSTR+NSTL, /* - */
21: 14 + FOLD+NSTR+NSTL+NPTR+NPTL, /* * */
22: 14 + FOLD+NSTR+NSTL+NPTR+NPTL, /* / */
23: 14 + FOLD+NSTR+NSTL+NPTR+NPTL+NFLT, /* % */
24: 9 + FOLD+NSTR+NSTL+NPTR+NPTL+NFLT, /* & */
25: 7 + FOLD+NSTR+NSTL+NPTR+NPTL+NFLT, /* | */
26: 8 + FOLD+NSTR+NSTL+NPTR+NPTL+NFLT, /* ^ */
27: 12 + FOLD+NSTR+NSTL+NPTR+NPTL+NFLT, /* << */
28: 12 + FOLD+NSTR+NSTL+NPTR+NPTL+NFLT, /* >> */
29:
30: 2 + NSTR+NSTL+NPTR +ASGN+RLVL+RAS, /* += */
31: 2 + NSTR+NSTL+NPTR +ASGN+RLVL+RAS, /* -= */
32: 2 + NSTR+NSTL+NPTR+NPTL +ASGN+RLVL+RAS, /* *= */
33: 2 + NSTR+NSTL+NPTR+NPTL +ASGN+RLVL+RAS, /* /= */
34: 2 + NSTR+NSTL+NPTR+NPTL+NFLT+ASGN+RLVL+RAS, /* %= */
35: 2 + NSTR+NSTL+NPTR+NPTL+NFLT+ASGN+RLVL+RAS, /* &= */
36: 2 + NSTR+NSTL+NPTR+NPTL+NFLT+ASGN+RLVL+RAS, /* |= */
37: 2 + NSTR+NSTL+NPTR+NPTL+NFLT+ASGN+RLVL+RAS, /* ^= */
38: 2 + NSTR+NSTL+NPTR+NPTL+NFLT+ASGN+RLVL+RAS, /* <<= */
39: 2 + NSTR+NSTL+NPTR+NPTL+NFLT+ASGN+RLVL+RAS, /* >>= */
40:
41: 10 + FOLD+NSTR+NSTL, /* == */
42: 10 + FOLD+NSTR+NSTL, /* != */
43: 11 + FOLD+NSTR+NSTL, /* > */
44: 11 + FOLD+NSTR+NSTL, /* >= */
45: 11 + FOLD+NSTR+NSTL, /* <= */
46: 11 + FOLD+NSTR+NSTL, /* < */
47: 0, /* > unsigned */
48: 0, /* >= unsigned */
49: 0, /* <= unsigned */
50: 0, /* < unsigned */
51:
52: 0 + NSTL+NFLT, /* Ind */
53: 0 + RLVL, /* Addr */
54: 0 + FOLD+NSTL+NPTL, /* - u */
55: 0 + FOLD+NSTL+NPTL+NFLT, /* ~ */
56: 0 + FOLD+RTOL, /* ! */
57: 4 + FOLD+RTOL, /* ? */
58: 4 + RAS, /* : */
59: 15 + NSTL+RLVL+RAS, /* ++x */
60: 15 + NSTL+RLVL+RAS, /* --x */
61: 15 + NSTL+RLVL+RAS, /* x++ */
62: 15 + NSTL+RLVL+RAS, /* x-- */
63: 1 + FOLD, /* , */
64: 0 + NSTL, /* Call */
65: 6 + FOLD+RTOL+RTOR, /* && */
66: 5 + FOLD+RTOL+RTOR, /* || */
67: 0, /* Cast of types */
68: 0, /* Conversion */
69: 0, /* Field marker */
70: 0 + RAS, /* Sizeof */
71: 2 + ASGN+RLVL+RAS, /* = */
72: 0, /* Drain conversions */
73: 0, /* Init */
74: 0, /* Arglist */
75: 0, /* Leaf */
76: 0, /* Fix up */
77: 0 /* Block move */
78:
79: };
80:
81: /*
82: * Conversions.
83: * Indexed by 12*(lt-T_CHAR) + (rt-T_CHAR).
84: * Linear types are the same as the abstract types,
85: * with all pointers mapped to T_PTR
86: * and nothing greater than T_STRUCT.
87: * Flags are:
88: * GOAL Mask to get goal type.
89: * GTR Goal is same as right.
90: * GTL Goal is same as left.
91: * CVR Convert right.
92: * CVL Convert left.
93: * CVRA If op is ASGN, do CVR.
94: * CARA If op is ASGN, do CAST right side.
95: * UREL Use unsigned relations.
96: */
97: short cvdope[] = {
98:
99: T_INT + CVL + CVR + CVRA, /* c :: c */
100: T_UINT + CVL + CVR + CVRA + UREL, /* c :: uc */
101: T_INT + CVL + CVR + CVRA, /* c :: s */
102: T_UINT + CVL + CVR + CVRA + UREL, /* c :: us */
103: T_INT + CVL, /* c :: i */
104: T_UINT + CVL + CVRA + UREL, /* c :: ui */
105: GTR + CVL + CARA + UREL, /* c :: p */
106: T_LONG + CVL + CVRA, /* c :: l */
107: T_ULONG + CVL + CVRA + UREL, /* c :: ul */
108: T_DOUBLE+ CVL + CVR + CVRA, /* c :: f */
109: T_DOUBLE+ CVL + CVRA, /* c :: d */
110: 0, /* c :: v */
111: 0, /* c :: t */
112:
113: T_UINT + CVL + CVR + CVRA + UREL, /* uc :: c */
114: T_UINT + CVL + CVR + CVRA + UREL, /* uc :: uc */
115: T_UINT + CVL + CVR + CVRA + UREL, /* uc :: s */
116: T_UINT + CVL + CVR + CVRA + UREL, /* uc :: us */
117: T_UINT + CVL + CVR + UREL, /* uc :: i */
118: T_UINT + CVL + CVRA + UREL, /* uc :: ui */
119: GTR + CVL + CARA + UREL, /* uc :: p */
120: T_ULONG + CVL + CVR + CVRA + UREL, /* uc :: l */
121: T_ULONG + CVL + CVRA + UREL, /* uc :: ul */
122: T_DOUBLE+ CVL + CVR + CVRA, /* uc :: f */
123: T_DOUBLE+ CVL + CVRA, /* uc :: d */
124: 0, /* uc :: v */
125: 0, /* uc :: t */
126:
127: T_INT + CVL + CVR + CVRA, /* s :: c */
128: T_UINT + CVL + CVR + CVRA + UREL, /* s :: uc */
129: T_INT + CVL + CVR + CVRA, /* s :: s */
130: T_UINT + CVL + CVR + CVRA + UREL, /* s :: us */
131: T_INT + CVL, /* s :: i */
132: T_UINT + CVL + CVRA + UREL, /* s :: ui */
133: GTR + CVL + CARA + UREL, /* s :: p */
134: T_LONG + CVL + CVRA, /* s :: l */
135: T_ULONG + CVL + CVRA + UREL, /* s :: ul */
136: T_DOUBLE+ CVL + CVR + CVRA, /* s :: f */
137: T_DOUBLE+ CVL + CVRA, /* s :: d */
138: 0, /* s :: v */
139: 0, /* s :: t */
140:
141: T_UINT + CVL + CVR + CVRA + UREL, /* us :: c */
142: T_UINT + CVL + CVR + CVRA + UREL, /* us :: uc */
143: T_UINT + CVL + CVR + CVRA + UREL, /* us :: s */
144: T_UINT + CVL + CVR + CVRA + UREL, /* us :: us */
145: T_UINT + CVL + CVR + CVRA + UREL, /* us :: i */
146: T_UINT + CVL + UREL, /* us :: ui */
147: GTR + CVL + CARA + UREL, /* us :: p */
148: T_ULONG + CVL + CVR + CVRA + UREL, /* us :: l */
149: T_ULONG + CVL + CVRA + UREL, /* us :: ul */
150: T_DOUBLE+ CVL + CVR + CVRA, /* us :: f */
151: T_DOUBLE+ CVL + CVRA, /* us :: d */
152: 0, /* us :: v */
153: 0, /* us :: t */
154:
155: T_INT + CVR + CVRA, /* i :: c */
156: T_UINT + CVL + CVR + CVRA + UREL, /* i :: uc */
157: T_INT + CVR + CVRA, /* i :: s */
158: T_UINT + CVL + CVR + CVRA + UREL, /* i :: us */
159: T_INT, /* i :: i */
160: T_UINT + CVL + CVRA + UREL, /* i :: ui */
161: GTR + CVL + CARA + UREL, /* i :: p */
162: T_LONG + CVL + CVRA, /* i :: l */
163: T_ULONG + CVL + CVRA + UREL, /* i :: ul */
164: T_DOUBLE+ CVL + CVR + CVRA, /* i :: f */
165: T_DOUBLE+ CVL + CVRA, /* i :: d */
166: 0, /* i :: v */
167: 0, /* i :: t */
168:
169: T_UINT + CVR + CVRA + UREL, /* ui :: c */
170: T_UINT + CVR + CVRA + UREL, /* ui :: uc */
171: T_UINT + CVR + CVRA + UREL, /* ui :: s */
172: T_UINT + CVR + CVRA + UREL, /* ui :: us */
173: T_UINT + CVR + CVRA + UREL, /* ui :: i */
174: T_UINT + UREL, /* ui :: ui */
175: GTR + CVL + CARA + UREL, /* ui :: p */
176: T_ULONG + CVL + CVR + CVRA + UREL, /* ui :: l */
177: T_ULONG + CVL + CVRA + UREL, /* ui :: ul */
178: T_DOUBLE+ CVL + CVR + CVRA, /* ui :: f */
179: T_DOUBLE+ CVL + CVRA, /* ui :: d */
180: 0, /* ui :: v */
181: 0, /* ui :: t */
182:
183: GTL + CVR + CVRA + UREL, /* p :: c */
184: GTL + CVR + CVRA + UREL, /* p :: uc */
185: GTL + CVR + CVRA + UREL, /* p :: s */
186: GTL + CVR + CVRA + UREL, /* p :: us */
187: GTL + CVR + CVRA + UREL, /* p :: i */
188: GTL + CVR + CVRA + UREL, /* p :: ui */
189: GTL + UREL, /* p :: p */
190: GTL + CVR + CVRA + UREL, /* p :: l */
191: GTL + CVR + CVRA + UREL, /* p :: ul */
192: 0, /* p :: f */
193: 0, /* p :: d */
194: 0, /* p :: v */
195: 0, /* p :: t */
196:
197: T_LONG + CVR + CVRA, /* l :: c */
198: T_ULONG + CVL + CVR + CVRA + UREL, /* l :: uc */
199: T_LONG + CVR + CVRA, /* l :: s */
200: T_ULONG + CVL + CVR + CVRA + UREL, /* l :: us */
201: T_LONG + CVR + CVRA, /* l :: i */
202: T_ULONG + CVL + CVR + CVRA + UREL, /* l :: ui */
203: GTR + CVL + CARA + UREL, /* l :: p */
204: T_LONG, /* l :: l */
205: T_ULONG + CVL + CVRA + UREL, /* l :: ul */
206: T_DOUBLE+ CVL + CVR + CVRA, /* l :: f */
207: T_DOUBLE+ CVL + CVRA, /* l :: d */
208: 0, /* l :: v */
209: 0, /* l :: t */
210:
211: T_ULONG + CVR + CVRA + UREL, /* ul :: c */
212: T_ULONG + CVR + CVRA + UREL, /* ul :: uc */
213: T_ULONG + CVR + CVRA + UREL, /* ul :: s */
214: T_ULONG + CVR + CVRA + UREL, /* ul :: us */
215: T_ULONG + CVR + CVRA + UREL, /* ul :: i */
216: T_ULONG + CVR + CVRA + UREL, /* ul :: ui */
217: GTR + CVL + CARA + UREL, /* ul :: p */
218: T_ULONG + CVR + CVRA + UREL, /* ul :: l */
219: T_ULONG + UREL, /* ul :: ul */
220: T_DOUBLE+ CVL + CVR + CVRA, /* ul :: f */
221: T_DOUBLE+ CVL + CVRA, /* ul :: d */
222: 0, /* ul :: v */
223: 0, /* ul :: t */
224:
225: T_DOUBLE+ CVL + CVR + CVRA, /* f :: c */
226: T_DOUBLE+ CVL + CVR + CVRA, /* f :: uc */
227: T_DOUBLE+ CVL + CVR + CVRA, /* f :: s */
228: T_DOUBLE+ CVL + CVR + CVRA, /* f :: us */
229: T_DOUBLE+ CVL + CVR + CVRA, /* f :: i */
230: T_DOUBLE+ CVL + CVR + CVRA, /* f :: ui */
231: 0, /* f :: p */
232: T_DOUBLE+ CVL + CVR + CVRA, /* f :: l */
233: T_DOUBLE+ CVL + CVR + CVRA, /* f :: ul */
234: T_DOUBLE+ CVL + CVR + CVRA, /* f :: f */
235: T_DOUBLE+ CVL + CVRA, /* f :: d */
236: 0, /* f :: v */
237: 0, /* f :: t */
238:
239: T_DOUBLE + CVR + CVRA, /* d :: c */
240: T_DOUBLE + CVR + CVRA, /* d :: uc */
241: T_DOUBLE + CVR + CVRA, /* d :: s */
242: T_DOUBLE + CVR + CVRA, /* d :: us */
243: T_DOUBLE + CVR + CVRA, /* d :: i */
244: T_DOUBLE + CVR + CVRA, /* d :: ui */
245: 0, /* d :: p */
246: T_DOUBLE + CVR + CVRA, /* d :: l */
247: T_DOUBLE + CVR + CVRA, /* d :: ul */
248: T_DOUBLE + CVR + CVRA, /* d :: f */
249: T_DOUBLE, /* d :: d */
250: 0, /* d :: v */
251: 0, /* d :: t */
252:
253: 0, /* v :: c */
254: 0, /* v :: uc */
255: 0, /* v :: s */
256: 0, /* v :: us */
257: 0, /* v :: i */
258: 0, /* v :: ui */
259: 0, /* v :: p */
260: 0, /* v :: l */
261: 0, /* v :: ul */
262: 0, /* v :: f */
263: 0, /* v :: d */
264: 0, /* v :: v */
265: 0, /* v :: t */
266:
267: 0, /* t :: c */
268: 0, /* t :: uc */
269: 0, /* t :: s */
270: 0, /* t :: us */
271: 0, /* t :: i */
272: 0, /* t :: ui */
273: 0, /* t :: p */
274: 0, /* t :: l */
275: 0, /* t :: ul */
276: 0, /* t :: f */
277: 0, /* t :: d */
278: 0, /* t :: v */
279: GTL /* t :: t */
280: };
281:
282: /* end of n0/dope.c */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.