comparison dmd/StructLiteralExp.d @ 90:39648eb578f6

more Expressions work
author Eldar Insafutdinov <e.insafutdinov@gmail.com>
date Mon, 30 Aug 2010 20:27:56 +0100
parents 8e69d041a99d
children ceda59b4d255
comparison
equal deleted inserted replaced
88:23280d154c5b 90:39648eb578f6
163 163
164 if (i != -1) 164 if (i != -1)
165 { 165 {
166 //printf("\ti = %d\n", i); 166 //printf("\ti = %d\n", i);
167 assert(i < elements.dim); 167 assert(i < elements.dim);
168 e = cast(Expression)elements.data[i]; 168 e = elements[i];
169 if (e) 169 if (e)
170 { 170 {
171 //writef("e = %s, e.type = %s\n", e.toChars(), e.type.toChars()); 171 //writef("e = %s, e.type = %s\n", e.toChars(), e.type.toChars());
172 172
173 /* If type is a static array, and e is an initializer for that array, 173 /* If type is a static array, and e is an initializer for that array,
178 TypeSArray tsa = cast(TypeSArray)type; 178 TypeSArray tsa = cast(TypeSArray)type;
179 size_t length = cast(size_t) tsa.dim.toInteger(); 179 size_t length = cast(size_t) tsa.dim.toInteger();
180 Expressions z = new Expressions; 180 Expressions z = new Expressions;
181 z.setDim(length); 181 z.setDim(length);
182 for (int q = 0; q < length; ++q) 182 for (int q = 0; q < length; ++q)
183 z.data[q] = e.copy(); 183 z[q] = e.copy();
184 e = new ArrayLiteralExp(loc, z); 184 e = new ArrayLiteralExp(loc, z);
185 e.type = type; 185 e.type = type;
186 } 186 }
187 else 187 else
188 { 188 {
204 { 204 {
205 assert(v); 205 assert(v);
206 206
207 if (offset == v.offset && type.size() == v.type.size()) 207 if (offset == v.offset && type.size() == v.type.size())
208 { 208 {
209 Expression e = cast(Expression)elements.data[i]; 209 auto e = elements[i];
210 if (e) 210 if (e)
211 { 211 {
212 return i; 212 return i;
213 } 213 }
214 break; 214 break;
384 384
385 override bool checkSideEffect(int flag) 385 override bool checkSideEffect(int flag)
386 { 386 {
387 bool f = 0; 387 bool f = 0;
388 388
389 for (size_t i = 0; i < elements.dim; i++) 389 foreach (e; elements)
390 { 390 {
391 Expression e = cast(Expression)elements.data[i];
392 if (!e) 391 if (!e)
393 continue; 392 continue;
394 393
395 f |= e.checkSideEffect(2); 394 f |= e.checkSideEffect(2);
396 } 395 }
411 { 410 {
412 size_t dim = elements ? elements.dim : 0; 411 size_t dim = elements ? elements.dim : 0;
413 buf.printf("S%u", dim); 412 buf.printf("S%u", dim);
414 for (size_t i = 0; i < dim; i++) 413 for (size_t i = 0; i < dim; i++)
415 { 414 {
416 Expression e = cast(Expression)elements.data[i]; 415 auto e = elements[i];
417 if (e) 416 if (e)
418 e.toMangleBuffer(buf); 417 e.toMangleBuffer(buf);
419 else 418 else
420 buf.writeByte('v'); // 'v' for void 419 buf.writeByte('v'); // 'v' for void
421 } 420 }