Constant fold structliteral.member again.

This commit is contained in:
Christian Kamm
2008-09-12 12:39:06 +02:00
parent bba1994b05
commit f0abdf860a
3 changed files with 47 additions and 0 deletions

View File

@@ -276,6 +276,27 @@ Expression *PtrExp::optimize(int result)
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;