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

@@ -2157,6 +2157,27 @@ Expression *PtrExp::interpret(InterState *istate)
return e;
}
Expression *DotVarExp::interpret(InterState *istate)
{ Expression *e = EXP_CANT_INTERPRET;
Expression *ex = e1->interpret(istate);
// Constant fold structliteral.member
if (ex != EXP_CANT_INTERPRET && ex->op == TOKstructliteral)
{ StructLiteralExp *se = (StructLiteralExp *)ex;
VarDeclaration* v;
if (v = var->isVarDeclaration())
{
e = se->getField(type, v->offset);
if (!e)
e = EXP_CANT_INTERPRET;
}
}
return e;
}
/******************************* Special Functions ***************************/
Expression *interpret_aaLen(InterState *istate, Expressions *arguments)