Mercurial > projects > ddmd
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)