Mercurial > projects > ldc
changeset 361:932229a851a4 trunk
[svn r382] In CastExp, after the cast to CastExp.to force the type to be CastExp.type.
This is used for c.im for instance, where the cast is to idouble but type is double.
author | ChristianK |
---|---|
date | Mon, 14 Jul 2008 19:17:25 +0200 |
parents | 9c9544fd769d |
children | faa03bf92f0d |
files | gen/dvalue.h gen/toir.cpp |
diffstat | 2 files changed, 12 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/gen/dvalue.h Mon Jul 14 17:26:58 2008 +0200 +++ b/gen/dvalue.h Mon Jul 14 19:17:25 2008 +0200 @@ -37,7 +37,7 @@ // base class for d-values struct DValue : Object { - virtual Type* getType() = 0; + virtual Type*& getType() = 0; virtual LLValue* getLVal() { assert(0); return 0; } virtual LLValue* getRVal() { assert(0); return 0; } @@ -75,7 +75,7 @@ virtual LLValue* getRVal() { assert(val); return val; } - virtual Type* getType() { assert(type); return type; } + virtual Type*& getType() { assert(type); return type; } virtual DImValue* isIm() { return this; } virtual bool inPlace() { return inplace; } @@ -91,7 +91,7 @@ virtual LLValue* getRVal(); - virtual Type* getType() { assert(type); return type; } + virtual Type*& getType() { assert(type); return type; } virtual DConstValue* isConst() { return this; } }; @@ -119,7 +119,7 @@ virtual LLValue* getLVal(); virtual LLValue* getRVal(); - virtual Type* getType() { assert(type); return type; } + virtual Type*& getType() { assert(type); return type; } virtual DVarValue* isVar() { return this; } }; @@ -146,7 +146,7 @@ DSliceValue(Type* t, LLValue* l, LLValue* p) { type=t; ptr=p; len=l; } - virtual Type* getType() { assert(type); return type; } + virtual Type*& getType() { assert(type); return type; } virtual DSliceValue* isSlice() { return this; } }; @@ -162,7 +162,7 @@ virtual LLValue* getRVal(); - virtual Type* getType() { assert(type); return type; } + virtual Type*& getType() { assert(type); return type; } virtual DFuncValue* isFunc() { return this; } }; @@ -181,9 +181,9 @@ virtual LLValue* getLVal() { return lvalue->isLVal() ? lvalue->getLVal() : lvalue->getRVal(); } virtual LLValue* getRVal() { return rvalue->getRVal(); } - Type* getLType() { return lvalue->getType(); } - Type* getRType() { return rvalue->getType(); } - virtual Type* getType() { return getRType(); } + Type*& getLType() { return lvalue->getType(); } + Type*& getRType() { return rvalue->getType(); } + virtual Type*& getType() { return getRType(); } virtual DLRValue* isLRValue() { return this; } }; @@ -200,7 +200,7 @@ im = i; } - virtual Type* getType() { assert(type); return type; } + virtual Type*& getType() { assert(type); return type; } virtual DComplexValue* isComplex() { return this; } };