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)