Mercurial > projects > ldc
diff 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 |
line wrap: on
line diff
--- a/dmd/optimize.c Thu Sep 11 21:10:15 2008 +0200 +++ b/dmd/optimize.c Fri Sep 12 12:39:06 2008 +0200 @@ -276,6 +276,27 @@ return this; } +Expression *DotVarExp::optimize(int result) +{ + e1 = e1->optimize(result); + + // Constant fold structliteral.member + if (e1->op == TOKstructliteral) + { StructLiteralExp *se = (StructLiteralExp *)e1; + + VarDeclaration* v; + if (v = var->isVarDeclaration()) + { + Expression *e = se->getField(type, v->offset); + if (!e) + e = EXP_CANT_INTERPRET; + return e; + } + } + + return this; +} + Expression *CallExp::optimize(int result) { Expression *e = this;