# HG changeset patch # User lindquist # Date 1195762674 -3600 # Node ID a7ae554ce4f41796409de7e518c315251ddcb476 # Parent e8da7856a2607fa6ece2ea48188004f8a179dc07 [svn r115] Implemented the ClassInfo.defaultConstructor member. diff -r e8da7856a260 -r a7ae554ce4f4 gen/classes.cpp --- a/gen/classes.cpp Thu Nov 22 21:01:01 2007 +0100 +++ b/gen/classes.cpp Thu Nov 22 21:17:54 2007 +0100 @@ -632,13 +632,19 @@ inits.push_back(c); // offset typeinfo - // TODO c = build_offti_array(cd, cinfo->llvmInitZ->getOperand(10)); inits.push_back(c); // default constructor - // TODO - c = cinfo->llvmInitZ->getOperand(11); + if (cd->defaultCtor) { + DtoForceDeclareDsymbol(cd->defaultCtor); + c = isaConstant(cd->defaultCtor->llvmValue); + //const llvm::Type* toTy = cinfo->llvmInitZ->getOperand(11)->getType(); + c = llvm::ConstantExpr::getBitCast(c, llvm::PointerType::get(llvm::Type::Int8Ty)); // toTy); + } + else { + c = cinfo->llvmInitZ->getOperand(11); + } inits.push_back(c); /*size_t n = inits.size(); diff -r e8da7856a260 -r a7ae554ce4f4 llvmdc.kdevelop.filelist --- a/llvmdc.kdevelop.filelist Thu Nov 22 21:01:01 2007 +0100 +++ b/llvmdc.kdevelop.filelist Thu Nov 22 21:17:54 2007 +0100 @@ -337,6 +337,7 @@ test/classinfo1.d test/classinfo2.d test/classinfo3.d +test/classinfo4.d test/comma.d test/complex1.d test/complex2.d diff -r e8da7856a260 -r a7ae554ce4f4 test/classinfo4.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/classinfo4.d Thu Nov 22 21:17:54 2007 +0100 @@ -0,0 +1,18 @@ +module classinfo4; + +class C +{ +} + +class D +{ + this() + { + } +} + +void main() +{ + assert(C.classinfo.defaultConstructor is null); + assert(D.classinfo.defaultConstructor !is null); +}