From 4fee629c4d16cea1e663cde53392073b6d7cb85d Mon Sep 17 00:00:00 2001 From: David Nadlinger Date: Sun, 13 Oct 2013 06:09:38 +0200 Subject: [PATCH] Prefer more specific functions to DtoResolveDsymbol. The remaining ones should also be easy to remove with a closer look at the situation. Ideally, we would get rid of all of them at some point and use safe wrapper functions for accessing the IrDsymbol associated with a given declaration (which would emit the declarations on the fly if not already present). --- gen/classes.cpp | 6 +++--- gen/declarations.cpp | 2 +- gen/functions.cpp | 2 +- gen/llvmhelpers.cpp | 2 +- gen/rttibuilder.cpp | 3 ++- gen/toir.cpp | 6 +++--- 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/gen/classes.cpp b/gen/classes.cpp index 8dc9a9e6..2e8e13b6 100644 --- a/gen/classes.cpp +++ b/gen/classes.cpp @@ -98,7 +98,7 @@ DValue* DtoNewClass(Loc loc, TypeClass* tc, NewExp* newexp) // custom allocator else if (newexp->allocator) { - DtoResolveDsymbol(newexp->allocator); + DtoResolveFunction(newexp->allocator); DFuncValue dfn(newexp->allocator, newexp->allocator->ir.irFunc->func); DValue* res = DtoCallFunction(newexp->loc, NULL, &dfn, newexp->newargs); mem = DtoBitCast(res->getRVal(), DtoType(tc), ".newclass_custom"); @@ -139,7 +139,7 @@ DValue* DtoNewClass(Loc loc, TypeClass* tc, NewExp* newexp) { Logger::println("Calling constructor"); assert(newexp->arguments != NULL); - DtoResolveDsymbol(newexp->member); + DtoResolveFunction(newexp->member); DFuncValue dfn(newexp->member, newexp->member->ir.irFunc->func, mem); return DtoCallFunction(newexp->loc, tc, &dfn, newexp->arguments); } @@ -578,7 +578,7 @@ static LLConstant* build_class_dtor(ClassDeclaration* cd) if (!dtor) return getNullPtr(getVoidPtrType()); - DtoResolveDsymbol(dtor); + DtoResolveFunction(dtor); return llvm::ConstantExpr::getBitCast(dtor->ir.irFunc->func, getPtrToType(LLType::getInt8Ty(gIR->context()))); } diff --git a/gen/declarations.cpp b/gen/declarations.cpp index e9bff5c8..87faaf59 100644 --- a/gen/declarations.cpp +++ b/gen/declarations.cpp @@ -50,7 +50,7 @@ void InterfaceDeclaration::codegen(Ir* p) if (members && symtab) { - DtoResolveDsymbol(this); + DtoResolveClass(this); // Emit any members (e.g. final functions). for (ArrayIter it(members); !it.done(); it.next()) diff --git a/gen/functions.cpp b/gen/functions.cpp index 74bae086..57d4fb78 100644 --- a/gen/functions.cpp +++ b/gen/functions.cpp @@ -1178,7 +1178,7 @@ llvm::FunctionType* DtoBaseFunctionType(FuncDeclaration* fdecl) break; } - DtoResolveDsymbol(f); + DtoResolveFunction(f); return llvm::cast(DtoType(f->type)); } diff --git a/gen/llvmhelpers.cpp b/gen/llvmhelpers.cpp index 0d9677f1..de034092 100644 --- a/gen/llvmhelpers.cpp +++ b/gen/llvmhelpers.cpp @@ -1879,7 +1879,7 @@ DValue* DtoSymbolAddress(const Loc& loc, Type* type, Declaration* decl) // take care of forward references of global variables const bool isGlobal = vd->isDataseg() || (vd->storage_class & STCextern); if (isGlobal) - DtoResolveDsymbol(vd); + DtoResolveVariable(vd); assert(vd->ir.isSet() && "Variable not resolved."); diff --git a/gen/rttibuilder.cpp b/gen/rttibuilder.cpp index 1a2cc847..9b6b5a9e 100644 --- a/gen/rttibuilder.cpp +++ b/gen/rttibuilder.cpp @@ -11,6 +11,7 @@ #include "aggregate.h" #include "mtype.h" #include "gen/arrays.h" +#include "gen/functions.h" #include "gen/irstate.h" #include "gen/linkage.h" #include "gen/llvm.h" @@ -135,7 +136,7 @@ void RTTIBuilder::push_funcptr(FuncDeclaration* fd, Type* castto) { if (fd) { - DtoResolveDsymbol(fd); + DtoResolveFunction(fd); LLConstant* F = fd->ir.irFunc->func; if (castto) F = DtoBitCast(F, DtoType(castto)); diff --git a/gen/toir.cpp b/gen/toir.cpp index 2c613612..6106dff2 100644 --- a/gen/toir.cpp +++ b/gen/toir.cpp @@ -1585,7 +1585,7 @@ DValue* DotVarExp::toElem(IRState* p) } else if (FuncDeclaration* fdecl = var->isFuncDeclaration()) { - DtoResolveDsymbol(fdecl); + DtoResolveFunction(fdecl); // This is a bit more convoluted than it would need to be, because it // has to take templated interface methods into account, for which @@ -2122,7 +2122,7 @@ DValue* NewExp::toElem(IRState* p) if (allocator) { // custom allocator - DtoResolveDsymbol(allocator); + DtoResolveFunction(allocator); DFuncValue dfn(allocator, allocator->ir.irFunc->func); DValue* res = DtoCallFunction(loc, NULL, &dfn, newargs); mem = DtoBitCast(res->getRVal(), DtoType(ntype->pointerTo()), ".newstruct_custom"); @@ -2149,7 +2149,7 @@ DValue* NewExp::toElem(IRState* p) { Logger::println("Calling constructor"); assert(arguments != NULL); - DtoResolveDsymbol(member); + DtoResolveFunction(member); DFuncValue dfn(member, member->ir.irFunc->func, mem); DtoCallFunction(loc, ts, &dfn, arguments); }