Mercurial > projects > ddmd
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 } |