2 // Copyright (c) 1999-2006 by Digital Mars
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
22 enum TY impcnvResult
[TMAX
][TMAX
];
23 enum TY impcnvType1
[TMAX
][TMAX
];
24 enum TY impcnvType2
[TMAX
][TMAX
];
25 int impcnvWarn
[TMAX
][TMAX
];
27 int integral_promotion(int t
)
38 case Tuns16
: return Tint32
;
39 case Tdchar
: return Tuns32
;
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
;
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 X(Tbit
,Tbit
, Tint32
,Tint32
, Tint32
)
64 X(Tbit
,Tint8
, Tint32
,Tint32
, Tint32
)
65 X(Tbit
,Tuns8
, Tint32
,Tint32
, Tint32
)
66 X(Tbit
,Tint16
, Tint32
,Tint32
, Tint32
)
67 X(Tbit
,Tuns16
, Tint32
,Tint32
, Tint32
)
68 X(Tbit
,Tint32
, Tint32
,Tint32
, Tint32
)
69 X(Tbit
,Tuns32
, Tuns32
,Tuns32
, Tuns32
)
70 X(Tbit
,Tint64
, Tint64
,Tint64
, Tint64
)
71 X(Tbit
,Tuns64
, Tuns64
,Tuns64
, Tuns64
)
73 X(Tbit
,Tfloat32
, Tfloat32
,Tfloat32
, Tfloat32
)
74 X(Tbit
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
75 X(Tbit
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
76 X(Tbit
,Timaginary32
, Tfloat32
,Timaginary32
, Tfloat32
)
77 X(Tbit
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
78 X(Tbit
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
79 X(Tbit
,Tcomplex32
, Tfloat32
,Tcomplex32
, Tcomplex32
)
80 X(Tbit
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
81 X(Tbit
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
83 /* ======================= */
85 X(Tbool
,Tbool
, Tbool
,Tbool
, Tbool
)
86 X(Tbool
,Tint8
, Tint32
,Tint32
, Tint32
)
87 X(Tbool
,Tuns8
, Tint32
,Tint32
, Tint32
)
88 X(Tbool
,Tint16
, Tint32
,Tint32
, Tint32
)
89 X(Tbool
,Tuns16
, Tint32
,Tint32
, Tint32
)
90 X(Tbool
,Tint32
, Tint32
,Tint32
, Tint32
)
91 X(Tbool
,Tuns32
, Tuns32
,Tuns32
, Tuns32
)
92 X(Tbool
,Tint64
, Tint64
,Tint64
, Tint64
)
93 X(Tbool
,Tuns64
, Tuns64
,Tuns64
, Tuns64
)
95 X(Tbool
,Tfloat32
, Tfloat32
,Tfloat32
, Tfloat32
)
96 X(Tbool
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
97 X(Tbool
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
98 X(Tbool
,Timaginary32
, Tfloat32
,Timaginary32
, Tfloat32
)
99 X(Tbool
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
100 X(Tbool
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
101 X(Tbool
,Tcomplex32
, Tfloat32
,Tcomplex32
, Tcomplex32
)
102 X(Tbool
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
103 X(Tbool
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
105 /* ======================= */
107 X(Tint8
,Tint8
, Tint32
,Tint32
, Tint32
)
108 X(Tint8
,Tuns8
, Tint32
,Tint32
, Tint32
)
109 X(Tint8
,Tint16
, Tint32
,Tint32
, Tint32
)
110 X(Tint8
,Tuns16
, Tint32
,Tint32
, Tint32
)
111 X(Tint8
,Tint32
, Tint32
,Tint32
, Tint32
)
112 X(Tint8
,Tuns32
, Tuns32
,Tuns32
, Tuns32
)
113 X(Tint8
,Tint64
, Tint64
,Tint64
, Tint64
)
114 X(Tint8
,Tuns64
, Tuns64
,Tuns64
, Tuns64
)
116 X(Tint8
,Tfloat32
, Tfloat32
,Tfloat32
, Tfloat32
)
117 X(Tint8
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
118 X(Tint8
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
119 X(Tint8
,Timaginary32
, Tfloat32
,Timaginary32
, Tfloat32
)
120 X(Tint8
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
121 X(Tint8
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
122 X(Tint8
,Tcomplex32
, Tfloat32
,Tcomplex32
, Tcomplex32
)
123 X(Tint8
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
124 X(Tint8
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
126 /* ======================= */
128 X(Tuns8
,Tuns8
, Tint32
,Tint32
, Tint32
)
129 X(Tuns8
,Tint16
, Tint32
,Tint32
, Tint32
)
130 X(Tuns8
,Tuns16
, Tint32
,Tint32
, Tint32
)
131 X(Tuns8
,Tint32
, Tint32
,Tint32
, Tint32
)
132 X(Tuns8
,Tuns32
, Tuns32
,Tuns32
, Tuns32
)
133 X(Tuns8
,Tint64
, Tint64
,Tint64
, Tint64
)
134 X(Tuns8
,Tuns64
, Tuns64
,Tuns64
, Tuns64
)
136 X(Tuns8
,Tfloat32
, Tfloat32
,Tfloat32
, Tfloat32
)
137 X(Tuns8
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
138 X(Tuns8
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
139 X(Tuns8
,Timaginary32
, Tfloat32
,Timaginary32
, Tfloat32
)
140 X(Tuns8
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
141 X(Tuns8
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
142 X(Tuns8
,Tcomplex32
, Tfloat32
,Tcomplex32
, Tcomplex32
)
143 X(Tuns8
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
144 X(Tuns8
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
146 /* ======================= */
148 X(Tint16
,Tint16
, Tint32
,Tint32
, Tint32
)
149 X(Tint16
,Tuns16
, Tint32
,Tint32
, Tint32
)
150 X(Tint16
,Tint32
, Tint32
,Tint32
, Tint32
)
151 X(Tint16
,Tuns32
, Tuns32
,Tuns32
, Tuns32
)
152 X(Tint16
,Tint64
, Tint64
,Tint64
, Tint64
)
153 X(Tint16
,Tuns64
, Tuns64
,Tuns64
, Tuns64
)
155 X(Tint16
,Tfloat32
, Tfloat32
,Tfloat32
, Tfloat32
)
156 X(Tint16
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
157 X(Tint16
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
158 X(Tint16
,Timaginary32
, Tfloat32
,Timaginary32
, Tfloat32
)
159 X(Tint16
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
160 X(Tint16
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
161 X(Tint16
,Tcomplex32
, Tfloat32
,Tcomplex32
, Tcomplex32
)
162 X(Tint16
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
163 X(Tint16
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
165 /* ======================= */
167 X(Tuns16
,Tuns16
, Tint32
,Tint32
, Tint32
)
168 X(Tuns16
,Tint32
, Tint32
,Tint32
, Tint32
)
169 X(Tuns16
,Tuns32
, Tuns32
,Tuns32
, Tuns32
)
170 X(Tuns16
,Tint64
, Tint64
,Tint64
, Tint64
)
171 X(Tuns16
,Tuns64
, Tuns64
,Tuns64
, Tuns64
)
173 X(Tuns16
,Tfloat32
, Tfloat32
,Tfloat32
, Tfloat32
)
174 X(Tuns16
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
175 X(Tuns16
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
176 X(Tuns16
,Timaginary32
, Tfloat32
,Timaginary32
, Tfloat32
)
177 X(Tuns16
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
178 X(Tuns16
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
179 X(Tuns16
,Tcomplex32
, Tfloat32
,Tcomplex32
, Tcomplex32
)
180 X(Tuns16
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
181 X(Tuns16
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
183 /* ======================= */
185 X(Tint32
,Tint32
, Tint32
,Tint32
, Tint32
)
186 X(Tint32
,Tuns32
, Tuns32
,Tuns32
, Tuns32
)
187 X(Tint32
,Tint64
, Tint64
,Tint64
, Tint64
)
188 X(Tint32
,Tuns64
, Tuns64
,Tuns64
, Tuns64
)
190 X(Tint32
,Tfloat32
, Tfloat32
,Tfloat32
, Tfloat32
)
191 X(Tint32
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
192 X(Tint32
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
193 X(Tint32
,Timaginary32
, Tfloat32
,Timaginary32
, Tfloat32
)
194 X(Tint32
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
195 X(Tint32
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
196 X(Tint32
,Tcomplex32
, Tfloat32
,Tcomplex32
, Tcomplex32
)
197 X(Tint32
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
198 X(Tint32
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
200 /* ======================= */
202 X(Tuns32
,Tuns32
, Tuns32
,Tuns32
, Tuns32
)
203 X(Tuns32
,Tint64
, Tint64
,Tint64
, Tint64
)
204 X(Tuns32
,Tuns64
, Tuns64
,Tuns64
, Tuns64
)
206 X(Tuns32
,Tfloat32
, Tfloat32
,Tfloat32
, Tfloat32
)
207 X(Tuns32
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
208 X(Tuns32
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
209 X(Tuns32
,Timaginary32
, Tfloat32
,Timaginary32
, Tfloat32
)
210 X(Tuns32
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
211 X(Tuns32
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
212 X(Tuns32
,Tcomplex32
, Tfloat32
,Tcomplex32
, Tcomplex32
)
213 X(Tuns32
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
214 X(Tuns32
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
216 /* ======================= */
218 X(Tint64
,Tint64
, Tint64
,Tint64
, Tint64
)
219 X(Tint64
,Tuns64
, Tuns64
,Tuns64
, Tuns64
)
221 X(Tint64
,Tfloat32
, Tfloat32
,Tfloat32
, Tfloat32
)
222 X(Tint64
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
223 X(Tint64
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
224 X(Tint64
,Timaginary32
, Tfloat32
,Timaginary32
, Tfloat32
)
225 X(Tint64
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
226 X(Tint64
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
227 X(Tint64
,Tcomplex32
, Tfloat32
,Tcomplex32
, Tcomplex32
)
228 X(Tint64
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
229 X(Tint64
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
231 /* ======================= */
233 X(Tuns64
,Tuns64
, Tuns64
,Tuns64
, Tuns64
)
235 X(Tuns64
,Tfloat32
, Tfloat32
,Tfloat32
, Tfloat32
)
236 X(Tuns64
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
237 X(Tuns64
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
238 X(Tuns64
,Timaginary32
, Tfloat32
,Timaginary32
, Tfloat32
)
239 X(Tuns64
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
240 X(Tuns64
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
241 X(Tuns64
,Tcomplex32
, Tfloat32
,Tcomplex32
, Tcomplex32
)
242 X(Tuns64
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
243 X(Tuns64
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
245 /* ======================= */
247 X(Tfloat32
,Tfloat32
, Tfloat32
,Tfloat32
, Tfloat32
)
248 X(Tfloat32
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
249 X(Tfloat32
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
251 X(Tfloat32
,Timaginary32
, Tfloat32
,Timaginary32
, Tfloat32
)
252 X(Tfloat32
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
253 X(Tfloat32
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
255 X(Tfloat32
,Tcomplex32
, Tfloat32
,Tcomplex32
, Tcomplex32
)
256 X(Tfloat32
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
257 X(Tfloat32
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
259 /* ======================= */
261 X(Tfloat64
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
262 X(Tfloat64
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
264 X(Tfloat64
,Timaginary32
, Tfloat64
,Timaginary64
, Tfloat64
)
265 X(Tfloat64
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
266 X(Tfloat64
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
268 X(Tfloat64
,Tcomplex32
, Tfloat64
,Tcomplex64
, Tcomplex64
)
269 X(Tfloat64
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
270 X(Tfloat64
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
272 /* ======================= */
274 X(Tfloat80
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
276 X(Tfloat80
,Timaginary32
, Tfloat80
,Timaginary80
, Tfloat80
)
277 X(Tfloat80
,Timaginary64
, Tfloat80
,Timaginary80
, Tfloat80
)
278 X(Tfloat80
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
280 X(Tfloat80
,Tcomplex32
, Tfloat80
,Tcomplex80
, Tcomplex80
)
281 X(Tfloat80
,Tcomplex64
, Tfloat80
,Tcomplex80
, Tcomplex80
)
282 X(Tfloat80
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
284 /* ======================= */
286 X(Timaginary32
,Timaginary32
, Timaginary32
,Timaginary32
, Timaginary32
)
287 X(Timaginary32
,Timaginary64
, Timaginary64
,Timaginary64
, Timaginary64
)
288 X(Timaginary32
,Timaginary80
, Timaginary80
,Timaginary80
, Timaginary80
)
290 X(Timaginary32
,Tcomplex32
, Timaginary32
,Tcomplex32
, Tcomplex32
)
291 X(Timaginary32
,Tcomplex64
, Timaginary64
,Tcomplex64
, Tcomplex64
)
292 X(Timaginary32
,Tcomplex80
, Timaginary80
,Tcomplex80
, Tcomplex80
)
294 /* ======================= */
296 X(Timaginary64
,Timaginary64
, Timaginary64
,Timaginary64
, Timaginary64
)
297 X(Timaginary64
,Timaginary80
, Timaginary80
,Timaginary80
, Timaginary80
)
299 X(Timaginary64
,Tcomplex32
, Timaginary64
,Tcomplex64
, Tcomplex64
)
300 X(Timaginary64
,Tcomplex64
, Timaginary64
,Tcomplex64
, Tcomplex64
)
301 X(Timaginary64
,Tcomplex80
, Timaginary80
,Tcomplex80
, Tcomplex80
)
303 /* ======================= */
305 X(Timaginary80
,Timaginary80
, Timaginary80
,Timaginary80
, Timaginary80
)
307 X(Timaginary80
,Tcomplex32
, Timaginary80
,Tcomplex80
, Tcomplex80
)
308 X(Timaginary80
,Tcomplex64
, Timaginary80
,Tcomplex80
, Tcomplex80
)
309 X(Timaginary80
,Tcomplex80
, Timaginary80
,Tcomplex80
, Tcomplex80
)
311 /* ======================= */
313 X(Tcomplex32
,Tcomplex32
, Tcomplex32
,Tcomplex32
, Tcomplex32
)
314 X(Tcomplex32
,Tcomplex64
, Tcomplex64
,Tcomplex64
, Tcomplex64
)
315 X(Tcomplex32
,Tcomplex80
, Tcomplex80
,Tcomplex80
, Tcomplex80
)
317 /* ======================= */
319 X(Tcomplex64
,Tcomplex64
, Tcomplex64
,Tcomplex64
, Tcomplex64
)
320 X(Tcomplex64
,Tcomplex80
, Tcomplex80
,Tcomplex80
, Tcomplex80
)
322 /* ======================= */
324 X(Tcomplex80
,Tcomplex80
, Tcomplex80
,Tcomplex80
, Tcomplex80
)
328 #define Y(t1,t2) impcnvWarn[t1][t2] = 1;
377 for (i
= 0; i
< TMAX
; i
++)
378 for (j
= 0; j
< TMAX
; j
++)
380 if (impcnvResult
[i
][j
] == Terror
)
382 impcnvResult
[i
][j
] = impcnvResult
[j
][i
];
383 impcnvType1
[i
][j
] = impcnvType2
[j
][i
];
384 impcnvType2
[i
][j
] = impcnvType1
[j
][i
];
396 fp
= fopen("impcnvtab.c","w");
398 fprintf(fp
,"// This file is generated by impcnvgen.c\n");
399 fprintf(fp
,"#include \"mtype.h\"\n");
401 fprintf(fp
,"unsigned char Type::impcnvResult[TMAX][TMAX] =\n{\n");
402 for (i
= 0; i
< TMAX
; i
++)
404 for (j
= 0; j
< TMAX
; j
++)
406 fprintf(fp
, "%d,",impcnvResult
[i
][j
]);
412 fprintf(fp
,"unsigned char Type::impcnvType1[TMAX][TMAX] =\n{\n");
413 for (i
= 0; i
< TMAX
; i
++)
415 for (j
= 0; j
< TMAX
; j
++)
417 fprintf(fp
, "%d,",impcnvType1
[i
][j
]);
423 fprintf(fp
,"unsigned char Type::impcnvType2[TMAX][TMAX] =\n{\n");
424 for (i
= 0; i
< TMAX
; i
++)
426 for (j
= 0; j
< TMAX
; j
++)
428 fprintf(fp
, "%d,",impcnvType2
[i
][j
]);
434 fprintf(fp
,"unsigned char Type::impcnvWarn[TMAX][TMAX] =\n{\n");
435 for (i
= 0; i
< TMAX
; i
++)
437 for (j
= 0; j
< TMAX
; j
++)
439 fprintf(fp
, "%d,",impcnvWarn
[i
][j
]);