diff gen/tollvm.cpp @ 92:70d6113eeb8c trunk

[svn r96] Updated to DMD 1.023. Regular bugfixes.
author lindquist
date Thu, 08 Nov 2007 19:13:28 +0100
parents 3f949c6e2e9d
children 08508eebbb3e
line wrap: on
line diff
--- a/gen/tollvm.cpp	Wed Nov 07 04:52:56 2007 +0100
+++ b/gen/tollvm.cpp	Thu Nov 08 19:13:28 2007 +0100
@@ -795,12 +795,15 @@
 
 //////////////////////////////////////////////////////////////////////////////////////////
 
-DValue* DtoInitializer(Initializer* init)
+DValue* DtoInitializer(Initializer* init, DValue* v)
 {
     if (ExpInitializer* ex = init->isExpInitializer())
     {
         Logger::println("expression initializer");
+        assert(ex->exp);
+        if (v) gIR->exps.push_back(IRExp(NULL,ex->exp,v));
         return ex->exp->toElem(gIR);
+        if (v) gIR->exps.pop_back();
     }
     else if (init->isVoidInitializer())
     {
@@ -1226,6 +1229,7 @@
 
 void DtoAssign(DValue* lhs, DValue* rhs)
 {
+    Logger::cout() << "DtoAssign(...);\n";
     Type* t = DtoDType(lhs->getType());
     Type* t2 = DtoDType(rhs->getType());
 
@@ -1425,7 +1429,7 @@
     llvm::Value* cond = gIR->ir->CreateICmpEQ(gIR->ir->CreateLoad(gflag,"tmp"),DtoConstBool(false));
     gIR->ir->CreateCondBr(cond, initbb, endinitbb);
     gIR->scope() = IRScope(initbb,endinitbb);
-    DValue* ie = DtoInitializer(init);
+    DValue* ie = DtoInitializer(init, NULL);
     if (!ie->inPlace()) {
         DValue* dst = new DVarValue(t, gvar, true);
         DtoAssign(dst, ie);