- Versioned Expresssion::toElem with #if IN_DMD/IN_LLVM.

- Eliminated the DLRValue DValue.

- Implemented proactive handling of l-value CastExpS.

- Minor tweak in runtime memory.d .
This commit is contained in:
Tomas Lindquist Olsen
2009-03-28 05:00:43 +01:00
parent 06a29342d3
commit 36f6ebc77f
12 changed files with 594 additions and 482 deletions

View File

@@ -429,16 +429,7 @@ DValue* DtoCastComplex(Loc& loc, DValue* val, Type* _to)
}
LLValue* pair = DtoAggrPair(DtoType(_to), re, im);
DValue* rval = new DImValue(_to, pair);
// if the value we're casting is not a lvalue, the cast value can't be either
if (!val->isLVal()) {
return rval;
}
// unfortunately at this point, the cast value can show up as the lvalue for += and similar expressions.
// so we need to maintain the storage
return new DLRValue(val, rval);
return new DImValue(_to, pair);
}
else if (to->isimaginary()) {
// FIXME: this loads both values, even when we only need one