Mercurial > projects > ldc
diff gen/classes.cpp @ 169:2df270e1ba59 trunk
[svn r185] Fixed broken nested classes with data members, did DMD change the class layout? tango.text.Regex now compiles.
Commented some of the *very* verbose logging for -vv option.
author | lindquist |
---|---|
date | Tue, 06 May 2008 03:07:21 +0200 |
parents | a8cd9bc1021a |
children | db9890b3fb64 |
line wrap: on
line diff
--- a/gen/classes.cpp Tue May 06 02:26:17 2008 +0200 +++ b/gen/classes.cpp Tue May 06 03:07:21 2008 +0200 @@ -769,12 +769,11 @@ Logger::println("Resolving outer class"); LOG_SCOPE; DValue* thisval = newexp->thisexp->toElem(gIR); - size_t idx = 2; - //idx += gIR->irDsymbol[tc->sym].irStruct->interfaces.size(); - llvm::Value* dst = thisval->getRVal(); - llvm::Value* src = DtoGEPi(mem,0,idx,"tmp"); + size_t idx = 2 + gIR->irDsymbol[tc->sym->vthis].irField->index; + llvm::Value* src = thisval->getRVal(); + llvm::Value* dst = DtoGEPi(mem,0,idx,"tmp"); Logger::cout() << "dst: " << *dst << "\nsrc: " << *src << '\n'; - DtoStore(dst, src); + DtoStore(src, dst); } // set the context for nested classes else if (tc->sym->isNested()) @@ -1110,18 +1109,19 @@ VarDeclaration* vd = i->second.var; assert(vd); Type* vdtype = DtoDType(vd->type); - Logger::println("found %u type %s", vd->offset, vdtype->toChars()); + //Logger::println("found %u type %s", vd->offset, vdtype->toChars()); assert(gIR->irDsymbol[vd].irField->index >= 0); if (os == vd->offset && vdtype == t) { + Logger::println("found %s %s", vdtype->toChars(), vd->toChars()); idxs.push_back(gIR->irDsymbol[vd].irField->index + dataoffset); - Logger::cout() << "indexing: " << *ptr << '\n'; + //Logger::cout() << "indexing: " << *ptr << '\n'; ptr = DtoGEP(ptr, idxs, "tmp"); if (ptr->getType() != llt) ptr = gIR->ir->CreateBitCast(ptr, llt, "tmp"); - Logger::cout() << "indexing: " << *ptr << '\n'; + //Logger::cout() << "indexing: " << *ptr << '\n'; if (gIR->irDsymbol[vd].irField->indexOffset) ptr = new llvm::GetElementPtrInst(ptr, DtoConstUint(gIR->irDsymbol[vd].irField->indexOffset), "tmp", gIR->scopebb()); - Logger::cout() << "indexing: " << *ptr << '\n'; + //Logger::cout() << "indexing: " << *ptr << '\n'; return ptr; } else if (vdtype->ty == Tstruct && (vd->offset + vdtype->size()) > os) {