Scan dynamic libraries for GC roots
[delight/core.git] / dmd2 / impcnvgen.c
blobb7e8ab94b896af4193046f728a9e2a72051b8bc7
2 // Copyright (c) 1999-2006 by Digital Mars
3 // All Rights Reserved
4 // written by Walter Bright
5 // http://www.digitalmars.com
6 // License for redistribution is by either the Artistic License
7 // in artistic.txt, or the GNU General Public License in gnu.txt.
8 // See the included readme.txt for details.
10 /* NOTE: This file has been patched from the original DMD distribution to
11 work with the GDC compiler.
13 Modified by David Friedman, January 2007
16 #include <stdio.h>
17 #include <stdlib.h>
19 #define ENUM_TY_ONLY
20 #include "mtype.h"
22 TY impcnvResult[TMAX][TMAX];
23 TY impcnvType1[TMAX][TMAX];
24 TY impcnvType2[TMAX][TMAX];
25 int impcnvWarn[TMAX][TMAX];
27 int integral_promotion(int t)
29 switch (t)
31 case Tchar:
32 case Twchar:
33 //case Tbit:
34 case Tbool:
35 case Tint8:
36 case Tuns8:
37 case Tint16:
38 case Tuns16: return Tint32;
39 case Tdchar: return Tuns32;
40 default: return t;
44 void init()
45 { int i, j;
47 // Set conversion tables
48 for (i = 0; i < TMAX; i++)
49 for (j = 0; j < TMAX; j++)
50 { impcnvResult[i][j] = Terror;
51 impcnvType1[i][j] = Terror;
52 impcnvType2[i][j] = Terror;
53 impcnvWarn[i][j] = 0;
56 #define X(t1,t2, nt1,nt2, rt) \
57 impcnvResult[t1][t2] = rt; \
58 impcnvType1[t1][t2] = nt1; \
59 impcnvType2[t1][t2] = nt2;
61 /* ======================= */
63 #if 0
64 X(Tbit,Tbit, Tint32,Tint32, Tint32)
65 X(Tbit,Tint8, Tint32,Tint32, Tint32)
66 X(Tbit,Tuns8, Tint32,Tint32, Tint32)
67 X(Tbit,Tint16, Tint32,Tint32, Tint32)
68 X(Tbit,Tuns16, Tint32,Tint32, Tint32)
69 X(Tbit,Tint32, Tint32,Tint32, Tint32)
70 X(Tbit,Tuns32, Tuns32,Tuns32, Tuns32)
71 X(Tbit,Tint64, Tint64,Tint64, Tint64)
72 X(Tbit,Tuns64, Tuns64,Tuns64, Tuns64)
74 X(Tbit,Tfloat32, Tfloat32,Tfloat32, Tfloat32)
75 X(Tbit,Tfloat64, Tfloat64,Tfloat64, Tfloat64)
76 X(Tbit,Tfloat80, Tfloat80,Tfloat80, Tfloat80)
77 X(Tbit,Timaginary32, Tfloat32,Timaginary32, Tfloat32)
78 X(Tbit,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
79 X(Tbit,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
80 X(Tbit,Tcomplex32, Tfloat32,Tcomplex32, Tcomplex32)
81 X(Tbit,Tcomplex64, Tfloat64,Tcomplex64, Tcomplex64)
82 X(Tbit,Tcomplex80, Tfloat80,Tcomplex80, Tcomplex80)
83 #endif
85 /* ======================= */
87 X(Tbool,Tbool, Tbool,Tbool, Tbool)
88 X(Tbool,Tint8, Tint32,Tint32, Tint32)
89 X(Tbool,Tuns8, Tint32,Tint32, Tint32)
90 X(Tbool,Tint16, Tint32,Tint32, Tint32)
91 X(Tbool,Tuns16, Tint32,Tint32, Tint32)
92 X(Tbool,Tint32, Tint32,Tint32, Tint32)
93 X(Tbool,Tuns32, Tuns32,Tuns32, Tuns32)
94 X(Tbool,Tint64, Tint64,Tint64, Tint64)
95 X(Tbool,Tuns64, Tuns64,Tuns64, Tuns64)
97 X(Tbool,Tfloat32, Tfloat32,Tfloat32, Tfloat32)
98 X(Tbool,Tfloat64, Tfloat64,Tfloat64, Tfloat64)
99 X(Tbool,Tfloat80, Tfloat80,Tfloat80, Tfloat80)
100 X(Tbool,Timaginary32, Tfloat32,Timaginary32, Tfloat32)
101 X(Tbool,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
102 X(Tbool,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
103 X(Tbool,Tcomplex32, Tfloat32,Tcomplex32, Tcomplex32)
104 X(Tbool,Tcomplex64, Tfloat64,Tcomplex64, Tcomplex64)
105 X(Tbool,Tcomplex80, Tfloat80,Tcomplex80, Tcomplex80)
107 /* ======================= */
109 X(Tint8,Tint8, Tint32,Tint32, Tint32)
110 X(Tint8,Tuns8, Tint32,Tint32, Tint32)
111 X(Tint8,Tint16, Tint32,Tint32, Tint32)
112 X(Tint8,Tuns16, Tint32,Tint32, Tint32)
113 X(Tint8,Tint32, Tint32,Tint32, Tint32)
114 X(Tint8,Tuns32, Tuns32,Tuns32, Tuns32)
115 X(Tint8,Tint64, Tint64,Tint64, Tint64)
116 X(Tint8,Tuns64, Tuns64,Tuns64, Tuns64)
118 X(Tint8,Tfloat32, Tfloat32,Tfloat32, Tfloat32)
119 X(Tint8,Tfloat64, Tfloat64,Tfloat64, Tfloat64)
120 X(Tint8,Tfloat80, Tfloat80,Tfloat80, Tfloat80)
121 X(Tint8,Timaginary32, Tfloat32,Timaginary32, Tfloat32)
122 X(Tint8,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
123 X(Tint8,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
124 X(Tint8,Tcomplex32, Tfloat32,Tcomplex32, Tcomplex32)
125 X(Tint8,Tcomplex64, Tfloat64,Tcomplex64, Tcomplex64)
126 X(Tint8,Tcomplex80, Tfloat80,Tcomplex80, Tcomplex80)
128 /* ======================= */
130 X(Tuns8,Tuns8, Tint32,Tint32, Tint32)
131 X(Tuns8,Tint16, Tint32,Tint32, Tint32)
132 X(Tuns8,Tuns16, Tint32,Tint32, Tint32)
133 X(Tuns8,Tint32, Tint32,Tint32, Tint32)
134 X(Tuns8,Tuns32, Tuns32,Tuns32, Tuns32)
135 X(Tuns8,Tint64, Tint64,Tint64, Tint64)
136 X(Tuns8,Tuns64, Tuns64,Tuns64, Tuns64)
138 X(Tuns8,Tfloat32, Tfloat32,Tfloat32, Tfloat32)
139 X(Tuns8,Tfloat64, Tfloat64,Tfloat64, Tfloat64)
140 X(Tuns8,Tfloat80, Tfloat80,Tfloat80, Tfloat80)
141 X(Tuns8,Timaginary32, Tfloat32,Timaginary32, Tfloat32)
142 X(Tuns8,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
143 X(Tuns8,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
144 X(Tuns8,Tcomplex32, Tfloat32,Tcomplex32, Tcomplex32)
145 X(Tuns8,Tcomplex64, Tfloat64,Tcomplex64, Tcomplex64)
146 X(Tuns8,Tcomplex80, Tfloat80,Tcomplex80, Tcomplex80)
148 /* ======================= */
150 X(Tint16,Tint16, Tint32,Tint32, Tint32)
151 X(Tint16,Tuns16, Tint32,Tint32, Tint32)
152 X(Tint16,Tint32, Tint32,Tint32, Tint32)
153 X(Tint16,Tuns32, Tuns32,Tuns32, Tuns32)
154 X(Tint16,Tint64, Tint64,Tint64, Tint64)
155 X(Tint16,Tuns64, Tuns64,Tuns64, Tuns64)
157 X(Tint16,Tfloat32, Tfloat32,Tfloat32, Tfloat32)
158 X(Tint16,Tfloat64, Tfloat64,Tfloat64, Tfloat64)
159 X(Tint16,Tfloat80, Tfloat80,Tfloat80, Tfloat80)
160 X(Tint16,Timaginary32, Tfloat32,Timaginary32, Tfloat32)
161 X(Tint16,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
162 X(Tint16,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
163 X(Tint16,Tcomplex32, Tfloat32,Tcomplex32, Tcomplex32)
164 X(Tint16,Tcomplex64, Tfloat64,Tcomplex64, Tcomplex64)
165 X(Tint16,Tcomplex80, Tfloat80,Tcomplex80, Tcomplex80)
167 /* ======================= */
169 X(Tuns16,Tuns16, Tint32,Tint32, Tint32)
170 X(Tuns16,Tint32, Tint32,Tint32, Tint32)
171 X(Tuns16,Tuns32, Tuns32,Tuns32, Tuns32)
172 X(Tuns16,Tint64, Tint64,Tint64, Tint64)
173 X(Tuns16,Tuns64, Tuns64,Tuns64, Tuns64)
175 X(Tuns16,Tfloat32, Tfloat32,Tfloat32, Tfloat32)
176 X(Tuns16,Tfloat64, Tfloat64,Tfloat64, Tfloat64)
177 X(Tuns16,Tfloat80, Tfloat80,Tfloat80, Tfloat80)
178 X(Tuns16,Timaginary32, Tfloat32,Timaginary32, Tfloat32)
179 X(Tuns16,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
180 X(Tuns16,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
181 X(Tuns16,Tcomplex32, Tfloat32,Tcomplex32, Tcomplex32)
182 X(Tuns16,Tcomplex64, Tfloat64,Tcomplex64, Tcomplex64)
183 X(Tuns16,Tcomplex80, Tfloat80,Tcomplex80, Tcomplex80)
185 /* ======================= */
187 X(Tint32,Tint32, Tint32,Tint32, Tint32)
188 X(Tint32,Tuns32, Tuns32,Tuns32, Tuns32)
189 X(Tint32,Tint64, Tint64,Tint64, Tint64)
190 X(Tint32,Tuns64, Tuns64,Tuns64, Tuns64)
192 X(Tint32,Tfloat32, Tfloat32,Tfloat32, Tfloat32)
193 X(Tint32,Tfloat64, Tfloat64,Tfloat64, Tfloat64)
194 X(Tint32,Tfloat80, Tfloat80,Tfloat80, Tfloat80)
195 X(Tint32,Timaginary32, Tfloat32,Timaginary32, Tfloat32)
196 X(Tint32,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
197 X(Tint32,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
198 X(Tint32,Tcomplex32, Tfloat32,Tcomplex32, Tcomplex32)
199 X(Tint32,Tcomplex64, Tfloat64,Tcomplex64, Tcomplex64)
200 X(Tint32,Tcomplex80, Tfloat80,Tcomplex80, Tcomplex80)
202 /* ======================= */
204 X(Tuns32,Tuns32, Tuns32,Tuns32, Tuns32)
205 X(Tuns32,Tint64, Tint64,Tint64, Tint64)
206 X(Tuns32,Tuns64, Tuns64,Tuns64, Tuns64)
208 X(Tuns32,Tfloat32, Tfloat32,Tfloat32, Tfloat32)
209 X(Tuns32,Tfloat64, Tfloat64,Tfloat64, Tfloat64)
210 X(Tuns32,Tfloat80, Tfloat80,Tfloat80, Tfloat80)
211 X(Tuns32,Timaginary32, Tfloat32,Timaginary32, Tfloat32)
212 X(Tuns32,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
213 X(Tuns32,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
214 X(Tuns32,Tcomplex32, Tfloat32,Tcomplex32, Tcomplex32)
215 X(Tuns32,Tcomplex64, Tfloat64,Tcomplex64, Tcomplex64)
216 X(Tuns32,Tcomplex80, Tfloat80,Tcomplex80, Tcomplex80)
218 /* ======================= */
220 X(Tint64,Tint64, Tint64,Tint64, Tint64)
221 X(Tint64,Tuns64, Tuns64,Tuns64, Tuns64)
223 X(Tint64,Tfloat32, Tfloat32,Tfloat32, Tfloat32)
224 X(Tint64,Tfloat64, Tfloat64,Tfloat64, Tfloat64)
225 X(Tint64,Tfloat80, Tfloat80,Tfloat80, Tfloat80)
226 X(Tint64,Timaginary32, Tfloat32,Timaginary32, Tfloat32)
227 X(Tint64,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
228 X(Tint64,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
229 X(Tint64,Tcomplex32, Tfloat32,Tcomplex32, Tcomplex32)
230 X(Tint64,Tcomplex64, Tfloat64,Tcomplex64, Tcomplex64)
231 X(Tint64,Tcomplex80, Tfloat80,Tcomplex80, Tcomplex80)
233 /* ======================= */
235 X(Tuns64,Tuns64, Tuns64,Tuns64, Tuns64)
237 X(Tuns64,Tfloat32, Tfloat32,Tfloat32, Tfloat32)
238 X(Tuns64,Tfloat64, Tfloat64,Tfloat64, Tfloat64)
239 X(Tuns64,Tfloat80, Tfloat80,Tfloat80, Tfloat80)
240 X(Tuns64,Timaginary32, Tfloat32,Timaginary32, Tfloat32)
241 X(Tuns64,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
242 X(Tuns64,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
243 X(Tuns64,Tcomplex32, Tfloat32,Tcomplex32, Tcomplex32)
244 X(Tuns64,Tcomplex64, Tfloat64,Tcomplex64, Tcomplex64)
245 X(Tuns64,Tcomplex80, Tfloat80,Tcomplex80, Tcomplex80)
247 /* ======================= */
249 X(Tfloat32,Tfloat32, Tfloat32,Tfloat32, Tfloat32)
250 X(Tfloat32,Tfloat64, Tfloat64,Tfloat64, Tfloat64)
251 X(Tfloat32,Tfloat80, Tfloat80,Tfloat80, Tfloat80)
253 X(Tfloat32,Timaginary32, Tfloat32,Timaginary32, Tfloat32)
254 X(Tfloat32,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
255 X(Tfloat32,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
257 X(Tfloat32,Tcomplex32, Tfloat32,Tcomplex32, Tcomplex32)
258 X(Tfloat32,Tcomplex64, Tfloat64,Tcomplex64, Tcomplex64)
259 X(Tfloat32,Tcomplex80, Tfloat80,Tcomplex80, Tcomplex80)
261 /* ======================= */
263 X(Tfloat64,Tfloat64, Tfloat64,Tfloat64, Tfloat64)
264 X(Tfloat64,Tfloat80, Tfloat80,Tfloat80, Tfloat80)
266 X(Tfloat64,Timaginary32, Tfloat64,Timaginary64, Tfloat64)
267 X(Tfloat64,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
268 X(Tfloat64,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
270 X(Tfloat64,Tcomplex32, Tfloat64,Tcomplex64, Tcomplex64)
271 X(Tfloat64,Tcomplex64, Tfloat64,Tcomplex64, Tcomplex64)
272 X(Tfloat64,Tcomplex80, Tfloat80,Tcomplex80, Tcomplex80)
274 /* ======================= */
276 X(Tfloat80,Tfloat80, Tfloat80,Tfloat80, Tfloat80)
278 X(Tfloat80,Timaginary32, Tfloat80,Timaginary80, Tfloat80)
279 X(Tfloat80,Timaginary64, Tfloat80,Timaginary80, Tfloat80)
280 X(Tfloat80,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
282 X(Tfloat80,Tcomplex32, Tfloat80,Tcomplex80, Tcomplex80)
283 X(Tfloat80,Tcomplex64, Tfloat80,Tcomplex80, Tcomplex80)
284 X(Tfloat80,Tcomplex80, Tfloat80,Tcomplex80, Tcomplex80)
286 /* ======================= */
288 X(Timaginary32,Timaginary32, Timaginary32,Timaginary32, Timaginary32)
289 X(Timaginary32,Timaginary64, Timaginary64,Timaginary64, Timaginary64)
290 X(Timaginary32,Timaginary80, Timaginary80,Timaginary80, Timaginary80)
292 X(Timaginary32,Tcomplex32, Timaginary32,Tcomplex32, Tcomplex32)
293 X(Timaginary32,Tcomplex64, Timaginary64,Tcomplex64, Tcomplex64)
294 X(Timaginary32,Tcomplex80, Timaginary80,Tcomplex80, Tcomplex80)
296 /* ======================= */
298 X(Timaginary64,Timaginary64, Timaginary64,Timaginary64, Timaginary64)
299 X(Timaginary64,Timaginary80, Timaginary80,Timaginary80, Timaginary80)
301 X(Timaginary64,Tcomplex32, Timaginary64,Tcomplex64, Tcomplex64)
302 X(Timaginary64,Tcomplex64, Timaginary64,Tcomplex64, Tcomplex64)
303 X(Timaginary64,Tcomplex80, Timaginary80,Tcomplex80, Tcomplex80)
305 /* ======================= */
307 X(Timaginary80,Timaginary80, Timaginary80,Timaginary80, Timaginary80)
309 X(Timaginary80,Tcomplex32, Timaginary80,Tcomplex80, Tcomplex80)
310 X(Timaginary80,Tcomplex64, Timaginary80,Tcomplex80, Tcomplex80)
311 X(Timaginary80,Tcomplex80, Timaginary80,Tcomplex80, Tcomplex80)
313 /* ======================= */
315 X(Tcomplex32,Tcomplex32, Tcomplex32,Tcomplex32, Tcomplex32)
316 X(Tcomplex32,Tcomplex64, Tcomplex64,Tcomplex64, Tcomplex64)
317 X(Tcomplex32,Tcomplex80, Tcomplex80,Tcomplex80, Tcomplex80)
319 /* ======================= */
321 X(Tcomplex64,Tcomplex64, Tcomplex64,Tcomplex64, Tcomplex64)
322 X(Tcomplex64,Tcomplex80, Tcomplex80,Tcomplex80, Tcomplex80)
324 /* ======================= */
326 X(Tcomplex80,Tcomplex80, Tcomplex80,Tcomplex80, Tcomplex80)
328 #undef X
330 #define Y(t1,t2) impcnvWarn[t1][t2] = 1;
332 #if 0
333 Y(Tint8, Tbit)
334 Y(Tuns8, Tbit)
335 Y(Tint16, Tbit)
336 Y(Tuns16, Tbit)
337 Y(Tint32, Tbit)
338 Y(Tuns32, Tbit)
339 Y(Tint64, Tbit)
340 Y(Tuns64, Tbit)
341 #endif
343 Y(Tuns8, Tint8)
344 Y(Tint16, Tint8)
345 Y(Tuns16, Tint8)
346 Y(Tint32, Tint8)
347 Y(Tuns32, Tint8)
348 Y(Tint64, Tint8)
349 Y(Tuns64, Tint8)
351 Y(Tint8, Tuns8)
352 Y(Tint16, Tuns8)
353 Y(Tuns16, Tuns8)
354 Y(Tint32, Tuns8)
355 Y(Tuns32, Tuns8)
356 Y(Tint64, Tuns8)
357 Y(Tuns64, Tuns8)
359 Y(Tuns16, Tint16)
360 Y(Tint32, Tint16)
361 Y(Tuns32, Tint16)
362 Y(Tint64, Tint16)
363 Y(Tuns64, Tint16)
365 Y(Tint16, Tuns16)
366 Y(Tint32, Tuns16)
367 Y(Tuns32, Tuns16)
368 Y(Tint64, Tuns16)
369 Y(Tuns64, Tuns16)
371 // Y(Tuns32, Tint32)
372 Y(Tint64, Tint32)
373 Y(Tuns64, Tint32)
375 // Y(Tint32, Tuns32)
376 Y(Tint64, Tuns32)
377 Y(Tuns64, Tuns32)
379 Y(Tint64, Tuns64)
380 Y(Tuns64, Tint64)
382 for (i = 0; i < TMAX; i++)
383 for (j = 0; j < TMAX; j++)
385 if (impcnvResult[i][j] == Terror)
387 impcnvResult[i][j] = impcnvResult[j][i];
388 impcnvType1[i][j] = impcnvType2[j][i];
389 impcnvType2[i][j] = impcnvType1[j][i];
394 int main()
395 { FILE *fp;
396 int i;
397 int j;
399 init();
401 fp = fopen("impcnvtab.c","w");
403 fprintf(fp,"// This file is generated by impcnvgen.c\n");
404 fprintf(fp,"#include \"mtype.h\"\n");
406 fprintf(fp,"unsigned char Type::impcnvResult[TMAX][TMAX] =\n{\n");
407 for (i = 0; i < TMAX; i++)
409 for (j = 0; j < TMAX; j++)
411 fprintf(fp, "%d,",impcnvResult[i][j]);
413 fprintf(fp, "\n");
415 fprintf(fp,"};\n");
417 fprintf(fp,"unsigned char Type::impcnvType1[TMAX][TMAX] =\n{\n");
418 for (i = 0; i < TMAX; i++)
420 for (j = 0; j < TMAX; j++)
422 fprintf(fp, "%d,",impcnvType1[i][j]);
424 fprintf(fp, "\n");
426 fprintf(fp,"};\n");
428 fprintf(fp,"unsigned char Type::impcnvType2[TMAX][TMAX] =\n{\n");
429 for (i = 0; i < TMAX; i++)
431 for (j = 0; j < TMAX; j++)
433 fprintf(fp, "%d,",impcnvType2[i][j]);
435 fprintf(fp, "\n");
437 fprintf(fp,"};\n");
439 fprintf(fp,"unsigned char Type::impcnvWarn[TMAX][TMAX] =\n{\n");
440 for (i = 0; i < TMAX; i++)
442 for (j = 0; j < TMAX; j++)
444 fprintf(fp, "%d,",impcnvWarn[i][j]);
446 fprintf(fp, "\n");
448 fprintf(fp,"};\n");
450 fclose(fp);
451 return EXIT_SUCCESS;