Mercurial > projects > ddmd
diff dmd/VarExp.d @ 148:fe2e1b93e88f
phobos compiles now:
* fixed upgrade mistake in interpret.Util
+ implemented missing methods in RealExp,VarExp
author | Trass3r |
---|---|
date | Wed, 15 Sep 2010 03:58:55 +0200 |
parents | af1bebfd96a4 |
children | 0c8cc2a10f99 |
line wrap: on
line diff
--- a/dmd/VarExp.d Tue Sep 14 23:49:12 2010 +0100 +++ b/dmd/VarExp.d Wed Sep 15 03:58:55 2010 +0200 @@ -17,9 +17,11 @@ import dmd.TOK; import dmd.TY; import dmd.STC; +import dmd.SymbolDeclaration; import dmd.SymbolExp; import dmd.Type; import dmd.interpret.Util; +import dmd.backend.Util; import dmd.backend.dt_t; import dmd.expression.Util; @@ -258,7 +260,35 @@ override dt_t** toDt(dt_t** pdt) { - assert(false); + // writef("VarExp::toDt() %d\n", op); + for (; *pdt; pdt = &((*pdt).DTnext)) + {} + + VarDeclaration v = var.isVarDeclaration(); + if (v && (v.isConst() || v.isImmutable()) && + type.toBasetype().ty != Tsarray && v.init) + { + if (v.inuse) + { + error("recursive reference %s", toChars()); + return pdt; + } + v.inuse++; + *pdt = v.init.toDt(); + v.inuse--; + return pdt; + } + SymbolDeclaration sd = var.isSymbolDeclaration(); + if (sd && sd.dsym) + { + sd.dsym.toDt(pdt); + return pdt; + } + debug writef("VarExp::toDt(), kind = %s\n", var.kind()); + + error("non-constant expression %s", toChars()); + pdt = dtnzeros(pdt, 1); + return pdt; } version(DMDV1)