Mercurial > projects > ldc
comparison dmd/interpret.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 | 50383e476c7e |
comparison
equal
deleted
inserted
replaced
587:23538d0f0d5b | 588:870652a9af23 |
---|---|
2155 printf("PtrExp::interpret() %s = EXP_CANT_INTERPRET\n", toChars()); | 2155 printf("PtrExp::interpret() %s = EXP_CANT_INTERPRET\n", toChars()); |
2156 #endif | 2156 #endif |
2157 return e; | 2157 return e; |
2158 } | 2158 } |
2159 | 2159 |
2160 Expression *DotVarExp::interpret(InterState *istate) | |
2161 { Expression *e = EXP_CANT_INTERPRET; | |
2162 | |
2163 Expression *ex = e1->interpret(istate); | |
2164 | |
2165 // Constant fold structliteral.member | |
2166 if (ex != EXP_CANT_INTERPRET && ex->op == TOKstructliteral) | |
2167 { StructLiteralExp *se = (StructLiteralExp *)ex; | |
2168 | |
2169 VarDeclaration* v; | |
2170 if (v = var->isVarDeclaration()) | |
2171 { | |
2172 e = se->getField(type, v->offset); | |
2173 if (!e) | |
2174 e = EXP_CANT_INTERPRET; | |
2175 } | |
2176 } | |
2177 | |
2178 return e; | |
2179 } | |
2180 | |
2160 /******************************* Special Functions ***************************/ | 2181 /******************************* Special Functions ***************************/ |
2161 | 2182 |
2162 Expression *interpret_aaLen(InterState *istate, Expressions *arguments) | 2183 Expression *interpret_aaLen(InterState *istate, Expressions *arguments) |
2163 { | 2184 { |
2164 if (!arguments || arguments->dim != 1) | 2185 if (!arguments || arguments->dim != 1) |