Mercurial > projects > ldc
diff gen/rttibuilder.cpp @ 1376:a5d0e04298a8
Cleaned up TypeInfo_Tuple generation.
author | Tomas Lindquist Olsen <tomas.l.olsen gmail com> |
---|---|
date | Sun, 17 May 2009 05:07:51 +0200 |
parents | 63f4afd01036 |
children | a0a4d4dac1a4 |
line wrap: on
line diff
--- a/gen/rttibuilder.cpp Sun May 17 04:41:10 2009 +0200 +++ b/gen/rttibuilder.cpp Sun May 17 05:07:51 2009 +0200 @@ -60,26 +60,46 @@ inits.push_back(getNullValue(T)); } -void TypeInfoBuilder::push_void_array(size_t dim, llvm::Constant* ptr) +void TypeInfoBuilder::push_void_array(uint64_t dim, llvm::Constant* ptr) { inits.push_back(DtoConstSlice( DtoConstSize_t(dim), - DtoBitCast(ptr, getVoidPtrType()))); + DtoBitCast(ptr, getVoidPtrType()) + )); } -void TypeInfoBuilder::push_void_array(llvm::Constant* CI, Type* valtype, Dsymbol* sym) +void TypeInfoBuilder::push_void_array(llvm::Constant* CI, Type* valtype, Dsymbol* mangle_sym) { - std::string initname(sym->mangle()); - initname.append("13__defaultInitZ"); + std::string initname(mangle_sym->mangle()); + initname.append(".rtti.void[].data"); LLGlobalVariable* G = new llvm::GlobalVariable( CI->getType(), true, TYPEINFO_LINKAGE_TYPE, CI, initname, gIR->module); G->setAlignment(valtype->alignsize()); size_t dim = getTypePaddedSize(CI->getType()); + LLConstant* ptr = DtoBitCast(CI, DtoType(valtype->pointerTo())); + push_void_array(dim, G); } +void TypeInfoBuilder::push_array(llvm::Constant * CI, uint64_t dim, Type* valtype, Dsymbol * mangle_sym) +{ + std::string initname(mangle_sym?mangle_sym->mangle():".ldc"); + initname.append(".rtti."); + initname.append(valtype->arrayOf()->toChars()); + initname.append(".data"); + + LLGlobalVariable* G = new llvm::GlobalVariable( + CI->getType(), true, TYPEINFO_LINKAGE_TYPE, CI, initname, gIR->module); + G->setAlignment(valtype->alignsize()); + + inits.push_back(DtoConstSlice( + DtoConstSize_t(dim), + DtoBitCast(CI, DtoType(valtype->pointerTo())) + )); +} + void TypeInfoBuilder::push_uint(unsigned u) { inits.push_back(DtoConstUint(u));