diff dmd/VarExp.d @ 148:fe2e1b93e88f

phobos compiles now: * fixed upgrade mistake in interpret.Util + implemented missing methods in RealExp,VarExp
author Trass3r
date Wed, 15 Sep 2010 03:58:55 +0200
parents af1bebfd96a4
children 0c8cc2a10f99
line wrap: on
line diff
--- a/dmd/VarExp.d	Tue Sep 14 23:49:12 2010 +0100
+++ b/dmd/VarExp.d	Wed Sep 15 03:58:55 2010 +0200
@@ -17,9 +17,11 @@
 import dmd.TOK;
 import dmd.TY;
 import dmd.STC;
+import dmd.SymbolDeclaration;
 import dmd.SymbolExp;
 import dmd.Type;
 import dmd.interpret.Util;
+import dmd.backend.Util;
 import dmd.backend.dt_t;
 import dmd.expression.Util;
 
@@ -258,7 +260,35 @@
 
 	override dt_t** toDt(dt_t** pdt)
 	{
-		assert(false);
+		// writef("VarExp::toDt() %d\n", op);
+		for (; *pdt; pdt = &((*pdt).DTnext))
+		{}
+
+		VarDeclaration v = var.isVarDeclaration();
+		if (v && (v.isConst() || v.isImmutable()) &&
+			type.toBasetype().ty != Tsarray && v.init)
+		{
+			if (v.inuse)
+			{
+				error("recursive reference %s", toChars());
+				return pdt;
+			}
+			v.inuse++;
+			*pdt = v.init.toDt();
+			v.inuse--;
+			return pdt;
+		}
+		SymbolDeclaration sd = var.isSymbolDeclaration();
+		if (sd && sd.dsym)
+		{
+			sd.dsym.toDt(pdt);
+			return pdt;
+		}
+		debug writef("VarExp::toDt(), kind = %s\n", var.kind());
+
+		error("non-constant expression %s", toChars());
+		pdt = dtnzeros(pdt, 1);
+		return pdt;
 	}
 
 	version(DMDV1)