# HG changeset patch # User Trass3r # Date 1284424717 -7200 # Node ID 7171e6ea651dc1ff08bbf95436841e0e474847c6 # Parent 31c086f76669977c8a8682639649d4bb39680123 + Expression.toElem + Expression.toDt + Expression.isBit + BoolExp.optimize diff -r 31c086f76669 -r 7171e6ea651d dmd/BoolExp.d --- a/dmd/BoolExp.d Tue Sep 14 01:54:48 2010 +0200 +++ b/dmd/BoolExp.d Tue Sep 14 02:38:37 2010 +0200 @@ -24,7 +24,7 @@ override Expression semantic(Scope sc) { - UnaExp.semantic(sc); + super.semantic(sc); e1 = resolveProperties(sc, e1); e1 = e1.checkToBoolean(); type = Type.tboolean; @@ -33,7 +33,16 @@ override Expression optimize(int result) { - assert(false); + Expression e; + + e1 = e1.optimize(result); + if (e1.isConst() == 1) + { + e = Bool(type, e1); + } + else + e = this; + return e; } override Expression interpret(InterState istate) diff -r 31c086f76669 -r 7171e6ea651d dmd/Expression.d --- a/dmd/Expression.d Tue Sep 14 01:54:48 2010 +0200 +++ b/dmd/Expression.d Tue Sep 14 02:38:37 2010 +0200 @@ -53,6 +53,7 @@ import dmd.Complex; import dmd.backend.elem; +import dmd.backend.Util; import dmd.backend.dt_t; import core.memory; @@ -914,9 +915,12 @@ return false; } - int isBit() + /******************************** + * Does this expression result in either a 1 or a 0? + */ + int isBit() { - assert(false); + return false; } /******************************** @@ -960,7 +964,6 @@ /**************************************** * Resolve __LINE__ and __FILE__ to loc. */ - Expression resolveLoc(Loc loc, Scope sc) { return this; @@ -1064,12 +1067,21 @@ // Back end elem* toElem(IRState* irs) { + print(); assert(false); + return null; } dt_t** toDt(dt_t** pdt) { - assert(false); + debug + { + writef("Expression::toDt() %d\n", op); + dump(0); + } + error("non-constant expression %s", toChars()); + pdt = dtnzeros(pdt, 1); + return pdt; } }