Mercurial > projects > ldc
comparison dmd/optimize.c @ 588:870652a9af23
Constant fold structliteral.member again.
author | Christian Kamm <kamm incasoftware de> |
---|---|
date | Fri, 12 Sep 2008 12:39:06 +0200 |
parents | aaade6ded589 |
children | 330f999ade44 |
comparison
equal
deleted
inserted
replaced
587:23538d0f0d5b | 588:870652a9af23 |
---|---|
274 } | 274 } |
275 | 275 |
276 return this; | 276 return this; |
277 } | 277 } |
278 | 278 |
279 Expression *DotVarExp::optimize(int result) | |
280 { | |
281 e1 = e1->optimize(result); | |
282 | |
283 // Constant fold structliteral.member | |
284 if (e1->op == TOKstructliteral) | |
285 { StructLiteralExp *se = (StructLiteralExp *)e1; | |
286 | |
287 VarDeclaration* v; | |
288 if (v = var->isVarDeclaration()) | |
289 { | |
290 Expression *e = se->getField(type, v->offset); | |
291 if (!e) | |
292 e = EXP_CANT_INTERPRET; | |
293 return e; | |
294 } | |
295 } | |
296 | |
297 return this; | |
298 } | |
299 | |
279 Expression *CallExp::optimize(int result) | 300 Expression *CallExp::optimize(int result) |
280 { Expression *e = this; | 301 { Expression *e = this; |
281 | 302 |
282 e1 = e1->optimize(result); | 303 e1 = e1->optimize(result); |
283 if (e1->op == TOKvar && result & WANTinterpret) | 304 if (e1->op == TOKvar && result & WANTinterpret) |