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;