Mercurial > projects > ddmd
changeset 141:7171e6ea651d
+ Expression.toElem
+ Expression.toDt
+ Expression.isBit
+ BoolExp.optimize
author | Trass3r |
---|---|
date | Tue, 14 Sep 2010 02:38:37 +0200 |
parents | 31c086f76669 |
children | 3685b521ed05 |
files | dmd/BoolExp.d dmd/Expression.d |
diffstat | 2 files changed, 27 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- 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)
--- 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; } }