Split out overriding. WIP.

llvm-svn: 80732
This commit is contained in:
Mike Stump 2009-09-01 22:20:28 +00:00
parent 71e77ea89b
commit 40dc64bcfc
1 changed files with 13 additions and 6 deletions

View File

@ -892,13 +892,10 @@ public:
SeenVBase.clear();
}
void AddMethod(const CXXMethodDecl *MD, Index_t AddressPoint,
bool MorallyVirtual, Index_t Offset) {
bool OverrideMethod(const CXXMethodDecl *MD, llvm::Constant *m,
bool MorallyVirtual, Index_t Offset) {
typedef CXXMethodDecl::method_iterator meth_iter;
llvm::Constant *m;
m = wrap(CGM.GetAddrOfFunction(GlobalDecl(MD), Ptr8Ty));
// FIXME: Don't like the nested loops. For very large inheritance
// heirarchies we could have a table on the side with the final overridder
// and just replace each instance of an overridden method once. Would be
@ -925,11 +922,21 @@ public:
VCalls[VCall[OMD]] = Offset/8 - VCallOffset[OMD];
}
// submethods[VCall[OMD]] = wrap(Offset/8 - VCallOffset[OMD]);
return;
return true;
}
}
}
return false;
}
void AddMethod(const CXXMethodDecl *MD, Index_t AddressPoint,
bool MorallyVirtual, Index_t Offset) {
llvm::Constant *m;
m = wrap(CGM.GetAddrOfFunction(GlobalDecl(MD), Ptr8Ty));
if (OverrideMethod(MD, m, MorallyVirtual, Offset))
return;
// else allocate a new slot.
Index[MD] = submethods.size();
// VCall[MD] = Offset;