forked from OSchip/llvm-project
Implement the virtual getNextRedeclaration() for ObjCMethodDecl.
If it's in an ObjCContainerDecl, its "redeclaration" is the method definition in the corresponding ObjCImplDecl. If it's in an ObjCImplDecl, its "redeclaration" is the method in the interface. llvm-svn: 76512
This commit is contained in:
parent
60e9b7cf58
commit
a8cf0beeef
|
@ -154,7 +154,12 @@ private:
|
|||
EndLoc(endLoc), Body(0), SelfDecl(0), CmdDecl(0) {}
|
||||
|
||||
virtual ~ObjCMethodDecl() {}
|
||||
|
||||
|
||||
/// \brief A definition will return its interface declaration.
|
||||
/// An interface declaration will return its definition.
|
||||
/// Otherwise it will return itself.
|
||||
virtual ObjCMethodDecl *getNextRedeclaration();
|
||||
|
||||
public:
|
||||
|
||||
/// Destroy - Call destructors and release memory.
|
||||
|
|
|
@ -272,6 +272,30 @@ void ObjCMethodDecl::Destroy(ASTContext &C) {
|
|||
Decl::Destroy(C);
|
||||
}
|
||||
|
||||
/// \brief A definition will return its interface declaration.
|
||||
/// An interface declaration will return its definition.
|
||||
/// Otherwise it will return itself.
|
||||
ObjCMethodDecl *ObjCMethodDecl::getNextRedeclaration() {
|
||||
ASTContext &Ctx = getASTContext();
|
||||
ObjCMethodDecl *Redecl = 0;
|
||||
Decl *CtxD = cast<Decl>(getDeclContext());
|
||||
|
||||
if (ObjCInterfaceDecl *IFD = dyn_cast<ObjCInterfaceDecl>(CtxD)) {
|
||||
if (ObjCImplementationDecl *ImplD = Ctx.getObjCImplementation(IFD))
|
||||
Redecl = ImplD->getMethod(getSelector(), isInstanceMethod());
|
||||
|
||||
} else if (ObjCCategoryDecl *CD = dyn_cast<ObjCCategoryDecl>(CtxD)) {
|
||||
if (ObjCCategoryImplDecl *ImplD = Ctx.getObjCImplementation(CD))
|
||||
Redecl = ImplD->getMethod(getSelector(), isInstanceMethod());
|
||||
|
||||
} else if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(CtxD)) {
|
||||
if (ObjCInterfaceDecl *IFD = ImplD->getClassInterface())
|
||||
Redecl = IFD->getMethod(getSelector(), isInstanceMethod());
|
||||
}
|
||||
|
||||
return Redecl ? Redecl : this;
|
||||
}
|
||||
|
||||
void ObjCMethodDecl::createImplicitParams(ASTContext &Context,
|
||||
const ObjCInterfaceDecl *OID) {
|
||||
QualType selfTy;
|
||||
|
|
Loading…
Reference in New Issue