diff dmd/CondExp.d @ 123:9e39c7de8438

Make dmd test suite compile
author korDen
date Fri, 03 Sep 2010 20:46:58 +0400
parents e28b18c23469
children 010eb8f0e18d
line wrap: on
line diff
--- a/dmd/CondExp.d	Thu Sep 02 23:37:49 2010 +0100
+++ b/dmd/CondExp.d	Fri Sep 03 20:46:58 2010 +0400
@@ -3,6 +3,7 @@
 import dmd.common;
 import dmd.BinExp;
 import dmd.Loc;
+import dmd.PtrExp;
 import dmd.MATCH;
 import dmd.Expression;
 import dmd.Scope;
@@ -171,22 +172,39 @@
 
     override int isLvalue()
 	{
-		assert(false);
+		return e1.isLvalue() && e2.isLvalue();
 	}
 
-    override Expression toLvalue(Scope sc, Expression e)
+    override Expression toLvalue(Scope sc, Expression ex)
 	{
-		assert(false);
+		PtrExp e;
+
+		// convert (econd ? e1 : e2) to *(econd ? &e1 : &e2)
+		e = new PtrExp(loc, this, type);
+
+		e1 = e1.addressOf(sc);
+		//e1 = e1.toLvalue(sc, null);
+
+		e2 = e2.addressOf(sc);
+		//e2 = e2.toLvalue(sc, null);
+
+		typeCombine(sc);
+
+		type = e2.type;
+		return e;
 	}
 
     override Expression modifiableLvalue(Scope sc, Expression e)
 	{
-		assert(false);
+		error("conditional expression %s is not a modifiable lvalue", toChars());
+		return this;
 	}
 
     override Expression checkToBoolean()
 	{
-		assert(false);
+		e1 = e1.checkToBoolean();
+		e2 = e2.checkToBoolean();
+		return this;
 	}
 
     override bool checkSideEffect(int flag)