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)