Mercurial > projects > ldc
diff gen/toobj.cpp @ 136:0e28624814e8 trunk
[svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
author | lindquist |
---|---|
date | Thu, 17 Jan 2008 03:15:12 +0100 |
parents | 44a95ac7368a |
children | ce7b81fb957f |
line wrap: on
line diff
--- a/gen/toobj.cpp Mon Jan 14 23:09:55 2008 +0100 +++ b/gen/toobj.cpp Thu Jan 17 03:15:12 2008 +0100 @@ -41,6 +41,8 @@ #include "gen/todebug.h" #include "gen/runtime.h" +#include "ir/irvar.h" + ////////////////////////////////////////////////////////////////////////////////////////// // in gen/optimize.cpp @@ -169,7 +171,7 @@ size_t n = gIR->ctors.size(); if (n == 1) - return llvm::cast<llvm::Function>(gIR->ctors[0]->llvmValue); + return gIR->ctors[0]->irFunc->func; std::string name("_D"); name.append(gIR->dmodule->mangle()); @@ -184,7 +186,7 @@ LLVMBuilder builder(bb); for (size_t i=0; i<n; i++) { - llvm::Function* f = llvm::cast<llvm::Function>(gIR->ctors[i]->llvmValue); + llvm::Function* f = gIR->ctors[i]->irFunc->func; llvm::CallInst* call = builder.CreateCall(f,""); call->setCallingConv(llvm::CallingConv::Fast); } @@ -202,7 +204,7 @@ size_t n = gIR->dtors.size(); if (n == 1) - return llvm::cast<llvm::Function>(gIR->dtors[0]->llvmValue); + return gIR->dtors[0]->irFunc->func; std::string name("_D"); name.append(gIR->dmodule->mangle()); @@ -217,7 +219,7 @@ LLVMBuilder builder(bb); for (size_t i=0; i<n; i++) { - llvm::Function* f = llvm::cast<llvm::Function>(gIR->dtors[i]->llvmValue); + llvm::Function* f = gIR->dtors[i]->irFunc->func; llvm::CallInst* call = builder.CreateCall(f,""); call->setCallingConv(llvm::CallingConv::Fast); } @@ -235,7 +237,7 @@ size_t n = gIR->unitTests.size(); if (n == 1) - return llvm::cast<llvm::Function>(gIR->unitTests[0]->llvmValue); + return gIR->unitTests[0]->irFunc->func; std::string name("_D"); name.append(gIR->dmodule->mangle()); @@ -250,7 +252,7 @@ LLVMBuilder builder(bb); for (size_t i=0; i<n; i++) { - llvm::Function* f = llvm::cast<llvm::Function>(gIR->unitTests[i]->llvmValue); + llvm::Function* f = gIR->unitTests[i]->irFunc->func; llvm::CallInst* call = builder.CreateCall(f,""); call->setCallingConv(llvm::CallingConv::Fast); } @@ -354,7 +356,7 @@ ClassDeclaration* cd = (ClassDeclaration*)aclasses.data[i]; if (cd->isInterfaceDeclaration()) { - Logger::println("skipping interface '%s'", cd->toPrettyChars()); + Logger::println("skipping interface '%s' in moduleinfo", cd->toPrettyChars()); continue; } Logger::println("class: %s", cd->toPrettyChars()); @@ -507,7 +509,7 @@ llvmResolved = true; llvmDeclared = true; - llvmIRGlobal = new IRGlobal(this); + irGlobal = new IrGlobal(this); Logger::println("parent: %s (%s)", parent->toChars(), parent->kind()); @@ -529,13 +531,13 @@ else _linkage = DtoLinkage(protection, storage_class); - const llvm::Type* _type = llvmIRGlobal->type.get(); + const llvm::Type* _type = irGlobal->type.get(); Logger::println("Creating global variable"); std::string _name(mangle()); llvm::GlobalVariable* gvar = new llvm::GlobalVariable(_type,_isconst,_linkage,NULL,_name,gIR->module); - llvmValue = gvar; + irGlobal->value = gvar; if (static_local) DtoConstInitGlobal(this); @@ -549,9 +551,10 @@ Logger::println("Aggregate var declaration: '%s' offset=%d", toChars(), offset); const llvm::Type* _type = DtoType(type); + irField = new IrField(this); // add the field in the IRStruct - gIR->topstruct()->offsets.insert(std::make_pair(offset, IRStruct::Offset(this, _type))); + gIR->topstruct()->offsets.insert(std::make_pair(offset, IrStruct::Offset(this, _type))); } Logger::println("VarDeclaration::toObjFile is done");