Mercurial > projects > ldc
diff gen/toir.cpp @ 1434:5d0c043ff131
Remove code duplication for vtable loads and improve instruction naming to make
bitcode with virtual calls easier to read.
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Sat, 30 May 2009 13:04:49 +0200 |
parents | a6dfd3cb5b99 |
children | dd72f56ad211 |
line wrap: on
line diff
--- a/gen/toir.cpp Sat May 30 12:58:04 2009 +0200 +++ b/gen/toir.cpp Sat May 30 13:04:49 2009 +0200 @@ -1134,22 +1134,8 @@ assert(funcval); } else { - assert(fdecl->vtblIndex > 0); - assert(e1type->ty == Tclass); - - LLValue* zero = DtoConstUint(0); - size_t vtblidx = fdecl->vtblIndex; - if (Logger::enabled()) - Logger::cout() << "vthis: " << *vthis << '\n'; - funcval = DtoGEP(vthis, zero, zero); - funcval = DtoLoad(funcval); - Logger::println("vtblidx = %lu", vtblidx); - funcval = DtoGEP(funcval, zero, DtoConstUint(vtblidx), toChars()); - funcval = DtoLoad(funcval); - - funcval = DtoBitCast(funcval, getPtrToType(DtoType(fdecl->type))); - if (Logger::enabled()) - Logger::cout() << "funcval casted: " << *funcval << '\n'; + DImValue vthis3(e1type, vthis); + funcval = DtoVirtualFunctionPointer(&vthis3, fdecl, toChars()); } return new DFuncValue(fdecl, funcval, vthis2); @@ -2031,7 +2017,7 @@ LLValue* castfptr; if (func->isVirtual() && !func->isFinal()) - castfptr = DtoVirtualFunctionPointer(u, func); + castfptr = DtoVirtualFunctionPointer(u, func, toChars()); else if (func->isAbstract()) assert(0 && "TODO delegate to abstract method"); else if (func->toParent()->isInterfaceDeclaration())